verilog行为级建模(behavioral model)

Verilog HDL的抽象层级

  1. 行为级(behavioral) ,更高层级的对逻辑的行为进行建模;
  2. RTL级 逻辑在寄存器级(register level)进行建模;
  3. 结构级(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)相关推荐

  1. input 赋值_FPGA基础设计:Verilog行为级建模(过程赋值)

    来源:CSDN文章 使用逻辑门和连续赋值对电路建模,是相对详细的描述硬件的方法.使用过程块可以从更高层次的角度描述一个系统,称作行为级建模(behavirol modeling). 1. 过程赋值 阻 ...

  2. 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. ...

  3. 【Verilog HDL】从逻辑电路图到门级建模——人工翻译的方法论

    从左到右,从上到下 先搞定缓冲/非门,再写与/或门 1. 实例解读 先以四选一数据选择器进行说明 对于数字逻辑的部分不再说明,直接进行逻辑电路图到Verilog门级建模的人工翻译过程的描述. 1.1 ...

  4. 三、6【Verilog HDL】基础知识之门级建模

    参考书籍:<Verilog HDL 数字设计与综合>第二版,本文档为第5章的学习笔记.由于本章也讲述的建模方式.该建模方式是通常设计师常用的底层抽象层次.更为低层的为开关级建模. 想了解更 ...

  5. 在Verilog语言中,使用门级建模设计一个由1位全加器组成的4位全加器

    4位全加器的门级建模 Verilog语言的层级 在Verilog硬件描述语言中,我们可以分许多层次对电路进行描述,每一层都有自己的特点.层次分为开关级.门级.数据流级.行为级.我们不能说必须使用哪一种 ...

  6. verilog study-初级

    目录 简介 语言要素和数据类型 语言要素 数据类型 运算符和表达式 优先级: 算术运算符: 关系运算符 相等关系运算符 规约运算符: 移位运算符: 条件运算符: 连接和复制运算符: 模块 module ...

  7. matlab建模sar adc,SAR ADC的系统级建模与仿真

    徐韦佳,田俊杰,施琴 (中国人民解放军理工大学 理学院,江苏 南京 211101) 摘要:为了实现逐次逼近型模数转换器(Successive Approximation AnalogtoDigit ...

  8. 【模拟IC】DC-DC 电荷泵系统的行为级建模与分析

    目录 一. 行为级建模的目的和必要性 二. 电荷泵系统的设计方法 参考文献 一. 行为级建模的目的和必要性 图1 电荷泵系统框图 图1显示了电荷泵系统和控制模块.电荷泵输入电源电压(VDD)和振荡器产 ...

  9. Verilog门级实现二选一多路选择器

    使用门级电路实现1位二选一多路选择器. 通过真值表设计电路: 使用Verilog门级实现: module MUX2X1(A0,A1,S,Y);//命名 input A0,A1,S;//输入,全部为1位 ...

最新文章

  1. Java操作Kafka执行不成功
  2. 为什么有些画面让你终生难忘?GAN来告诉你原因
  3. 江苏省计算机专业公务员,江苏省考冷门专业的“春天”来了!
  4. 百分点认知智能实验室:NLP模型开发平台在舆情分析中的设计和实践(下)
  5. Redis实现求交集操作结果缓存的设计方案
  6. PHP随机数:mt_rand更快
  7. 宏定义 object-c 单例
  8. 20120321java
  9. 输出halloword
  10. jQuery-EasyUI
  11. Thinking in Java 13.7扫描输入
  12. 锂镍钴价格齐飞,新能源汽车涨价潮何时休?
  13. pentestbox基础设置
  14. html 缩小时字体错位,微信字体设置导致页面错位的解决方法
  15. ubc 文学院 计算机,UBC大学电气与计算机教授获加拿大国家最高科学奖
  16. android 百度地图大头针,百度地图的集成 ---自定义大头针和弹窗
  17. 网站关键词如何设置覆盖上百个关键词(佐伊科技分享干货)
  18. 基于 IjkPlayer 的视频播放器
  19. 软件提交到国外的下载站的几点操作和想法
  20. XP更新后出现“你可能是盗版软件受害者”解决方法

热门文章

  1. 磁盘阵列是什么,主要做什么用?
  2. 必get!建模中的对称美 | 3D MAX中三种对齐工具
  3. PyObject和PyTypeObject
  4. Qt读取界面的时间dateEdit,并将时间写入数据库中
  5. CUDA:两种自适应图像去噪技术KNN和NLM的实例
  6. 冒泡排序由浅入深详细分析图解
  7. SQL取整与时间差值返回
  8. AG256SL100 与EPM240T100 完全PIN TO PIN兼容
  9. apache+tomcat 集群学习 点滴1
  10. InDesign CS3 复合字体