verilog行为级建模(1)
verilog行为级建模(behavioral model)
Verilog HDL的抽象层级
- 行为级(behavioral) ,更高层级的对逻辑的行为进行建模;
- RTL级 逻辑在寄存器级(register level)进行建模;
- 结构级(structural) 逻辑在寄存器和门级进行建模;
程序块(procedural blocks)
Verilog的行为级代码一般要写在程序块内部,但也有例外。
Verilog中有两种程序块:
initial:initial块在零时刻开始执行,且仅执行一次。
always:always块一次次地循环执行,换言之,就像它的名字所说的那样,它一直(always)执行。
举例
module initia—l_example();
reg clk, reset, enable, data;initial beginclk = 0;reset = 0;enable = 0;data = 0;
end
endmodule
module always_example();
reg clk,reset,enable,q_in,data;always @ (posedge clk)if (reset) begindata <= 0;end else if (enable) begin data <= q_in;end
endmodule
上例中,initial block从零时刻开始执行,不需要等待;always block需要等待“触发事件”的发生,此处为时钟的上升沿,执行过一次后,再次等待下一次“触发事件”的发生。
顺序赋值语句
1、顺序赋值语句给reg, integer, real或者time变量赋值,不能给nets(wire数据类型)赋值。
2、可以给寄存器(reg类型)赋值为net(wire类型)、常数、其他寄存器或一个特定值。
顺序赋值组(procedural assignment group)
如果一个顺序块包含了不止一条声明,这些声明应当被包括在:
1、顺序begin - end块
2、并行frok - jion块
使用 begin-end 时,可以给这个group起名,我们称之为 named blocks
举例
例一
module initial_begin_end();
reg clk, reset, enable, data;initial begin
$monitor("%g clk = %b reset = %b enable = %b data = %b",$time, clk, reset, enable, data);#1 clk = 1;#10 reset = 1;#3 enable = `;#5 data = 0;#1 $finish;
endendmodule
begin:clk在延时一个时间单位后为0,reset延时11个时间单位后为0,16个时间单位后使能(enable),19个时间单位后data赋值为0。所有的语句顺序执行。
begin-end块的特点:
顺序执行
延时累积
块在最后一条语句之后结束
模拟结果:
0 clk=x reset=x enable=x data=x1 clk=0 reset=x enable=x data=x11 clk=0 reset=0 enable=x data=x16 clk=0 reset=0 enable=0 data=x19 clk=0 reset=0 enable=0 data=0
例二
1 module initial_fork_join();2 reg clk,reset,enable,data;3 4 initial begin5 $monitor("%g clk=%b reset=%b enable=%b data=%b", 6 $time, clk, reset, enable, data);7 fork8 #1 clk = 0;9 #10 reset = 0;10 #5 enable = 0;11 #3 data = 0;12 join13 #1 $display ("%g Terminating simulation", $time);14 $finish;15 end16 17 endmodule
fork:一个时间单位后clk被赋值,10个时间单位后reset被赋值,5个时间单位后enable被赋值,3个时间单位后data被赋值。所有语句并行(同时)执行。
特点:
同时执行
块在最后一条语句完成后结束(延迟最高的语句,它可以是块中的第一条语句)
模拟结果:
0 clk=x reset=x enable=x data=x
1 clk=0 reset=x enable=x data=x
3 clk=0 reset=x enable=x data=0
5 clk=0 reset=x enable=0 data=0
10 clk=0 reset=0 enable=0 data=0
11 Terminating simulation
阻塞和非阻塞赋值(Blocking and Nonblocking assignment)
- 阻塞赋值按照程序的排列顺序执行。
因为直到当前语句执行完毕才能执行下一跳语句,即“阻塞”了下一条语句的执行,所以被称为阻塞赋值。
阻塞赋值用 “=”,如 a = b;
- 非阻塞赋值是并行执行的。由于当前语句的执行不会阻塞下一条语句的执行,因此称为非阻塞语句。
非阻塞赋值用 “<=”,如 a <= b;
举例
1 module blocking_nonblocking();2 3 reg a,b,c,d;4 // Blocking Assignment5 initial begin6 #10 a = 0;7 #11 a = 1;8 #12 a = 0;9 #13 a = 1;10 end11 12 initial begin13 #10 b <= 0;14 #11 b <= 1;15 #12 b <= 0;16 #13 b <= 1;17 end18 19 initial begin20 c = #10 0;21 c = #11 1;22 c = #12 0;23 c = #13 1;24 end25 26 initial begin27 d <= #10 0;28 d <= #11 1;29 d <= #12 0;30 d <= #13 1;31 end32 33 initial begin34 $monitor("TIME = %g A = %b B = %b C = %b D = %b",$time, a, b, c, d);35 #50 $finish;36 end37 38 endmodule
波形:
verilog行为级建模(1)相关推荐
- input 赋值_FPGA基础设计:Verilog行为级建模(过程赋值)
来源:CSDN文章 使用逻辑门和连续赋值对电路建模,是相对详细的描述硬件的方法.使用过程块可以从更高层次的角度描述一个系统,称作行为级建模(behavirol modeling). 1. 过程赋值 阻 ...
- FPGA基础设计(10)Verilog行为级建模(过程赋值)
目录 1.过程赋值 1.1 特性1 1.2 特性2 2.过程连续赋值 3.case语句 3.1 do-not-cares 3.2 常数case 4.循环语句 5. 过程块 5.1 零延迟无限循环 5. ...
- 【Verilog HDL】从逻辑电路图到门级建模——人工翻译的方法论
从左到右,从上到下 先搞定缓冲/非门,再写与/或门 1. 实例解读 先以四选一数据选择器进行说明 对于数字逻辑的部分不再说明,直接进行逻辑电路图到Verilog门级建模的人工翻译过程的描述. 1.1 ...
- 三、6【Verilog HDL】基础知识之门级建模
参考书籍:<Verilog HDL 数字设计与综合>第二版,本文档为第5章的学习笔记.由于本章也讲述的建模方式.该建模方式是通常设计师常用的底层抽象层次.更为低层的为开关级建模. 想了解更 ...
- 在Verilog语言中,使用门级建模设计一个由1位全加器组成的4位全加器
4位全加器的门级建模 Verilog语言的层级 在Verilog硬件描述语言中,我们可以分许多层次对电路进行描述,每一层都有自己的特点.层次分为开关级.门级.数据流级.行为级.我们不能说必须使用哪一种 ...
- verilog study-初级
目录 简介 语言要素和数据类型 语言要素 数据类型 运算符和表达式 优先级: 算术运算符: 关系运算符 相等关系运算符 规约运算符: 移位运算符: 条件运算符: 连接和复制运算符: 模块 module ...
- matlab建模sar adc,SAR ADC的系统级建模与仿真
徐韦佳,田俊杰,施琴 (中国人民解放军理工大学 理学院,江苏 南京 211101) 摘要:为了实现逐次逼近型模数转换器(Successive Approximation AnalogtoDigit ...
- 【模拟IC】DC-DC 电荷泵系统的行为级建模与分析
目录 一. 行为级建模的目的和必要性 二. 电荷泵系统的设计方法 参考文献 一. 行为级建模的目的和必要性 图1 电荷泵系统框图 图1显示了电荷泵系统和控制模块.电荷泵输入电源电压(VDD)和振荡器产 ...
- Verilog门级实现二选一多路选择器
使用门级电路实现1位二选一多路选择器. 通过真值表设计电路: 使用Verilog门级实现: module MUX2X1(A0,A1,S,Y);//命名 input A0,A1,S;//输入,全部为1位 ...
最新文章
- Java操作Kafka执行不成功
- 为什么有些画面让你终生难忘?GAN来告诉你原因
- 江苏省计算机专业公务员,江苏省考冷门专业的“春天”来了!
- 百分点认知智能实验室:NLP模型开发平台在舆情分析中的设计和实践(下)
- Redis实现求交集操作结果缓存的设计方案
- PHP随机数:mt_rand更快
- 宏定义 object-c 单例
- 20120321java
- 输出halloword
- jQuery-EasyUI
- Thinking in Java 13.7扫描输入
- 锂镍钴价格齐飞,新能源汽车涨价潮何时休?
- pentestbox基础设置
- html 缩小时字体错位,微信字体设置导致页面错位的解决方法
- ubc 文学院 计算机,UBC大学电气与计算机教授获加拿大国家最高科学奖
- android 百度地图大头针,百度地图的集成 ---自定义大头针和弹窗
- 网站关键词如何设置覆盖上百个关键词(佐伊科技分享干货)
- 基于 IjkPlayer 的视频播放器
- 软件提交到国外的下载站的几点操作和想法
- XP更新后出现“你可能是盗版软件受害者”解决方法