行为级建模有两种标志性的结构:
initial结构和always结构
initial结构与always结构在一个module可以出现很多次,与数据流建模assign一样。
一个module中所有的initial结构和always结构都是同时开始执行的,不以代码中出现的先后顺序区分。但这两种结构都不支持嵌套。
一、行为级建模语法
1、initial结构

initial a = 1;initial begin
a = 1;
b = 2;
end

2、always结构

always   <时序控制方式> 执行语句
例:
always # a= ~a;always @(敏感事件)
例
always @(posedge a, negedge b) begin
a = 1;
b = 1;
endalways @(*)   ///表示该always结构中所有的事件信息

例子:电平触发D锁存器

always@(clk or reset or d)beginif(reset)q = 0;else if(clk)q = d;else
end

带异步清零功能的D触发器

always@(posedge clk or negedge reset)beginif(! reset)q = d;else q = d;
end

3、initial和always中有很多块使之成为一个整体
顺序快 begin····end
内容按顺序执行
并行快 fork···join
内容同时打开

begin
#10 a = 1;
#10 b = 1;
#10 c = 1;
endfork
#10 a = 1;
#20 b = 1;
#30 c = 1;
join
两段代码的执行结果一致

块之间可以嵌套

例
begina= 0;fork #10 b = 1;#10 c = {a,b};join#10 d = {b,a};end

4、if语句

(1)   if (condition) statement;(2)  if (condition) statement_1;else statement_2;(3)  if (condition_1) statement_1;else if (condition_2) statement_2;else statement_3;

若if后的statement中有很多条,可通过使用begin···end
注:每个if都有else,即便else无返回值,写一条空语句,这样更容易理解代码
5、case语句

case (表达式)
分支1:语句1;
分支2:语句2;
default:默认项;
endcase

6、循环语句

while(判断条件)
begin循环语句;
endfor(初始化条件 ; 判断条件 ; 变量控制)
begin循环语句;
endrepeat(次数)
begin循环体语句;
endrepeat (次数)@(posedge clock)
begin循环体语句
end
//循环n次上升沿forever #10 clock = ~clock;
等价于
always #10 clock = ~clock; 

7、过程性赋值语句
阻塞性赋值 a = 1;
非阻塞性赋值 b = 1;

例
initial begina = 0;b = 1;c = {a, b};d = {b, a};end
得到的值  a = 0,b = 1,c = 01,d = 10;
initial begina <= 0;b <= 1;c <= {a, b};d <= {b, a};end
得到的值 a = 0,b = 1,c d 未知,取决于a b之前的数值

二、行为级建模
1、四位全加器
RTL仿真电路图

module add4(A,B,CIN,COUT,S);
input [3:0] A, B;
input CIN;
output [3:0] S;
output COUT;
reg COUT;
reg [3:0] S;
always @(*)begin{COUT, S} = A + B + CIN;
end
endmodule

仿真效果如图所示

2、简易ALU电路
RTL电路图如图所示

module ALU(out, a, b, select);
input [7:0] a, b;
input [2:0] select;
output [7:0] out;
reg [7:0] out;
always @(*) begincase (select)3'b000: out = a; 3'b001: out = a + b;3'b010: out = a > b;3'b011: out = a * b;3'b100: out = a / b;3'b101: out = a % b;3'b110: out = a << 1;3'b111: out = a >> 1;default: out = 8'b00000000;endcase
end
endmodule

仿真电路图如下图所示

3、十进制计数器

RTL 电路图如图所示

/*完成的功能主要是实现74ls160的功能reset                异步复位端,上升沿有效,完成复位功能load                 同步置数端,高电平有效,完成置数功能clock                时钟端口en                   使能端,优先级在reset,load之后,暂停计输D                    同步置数的数据输入端Q                    计数器数据输出端C                    进位输出端
*/
module counter160(clock, reset, load, en, D, Q, C);
input clock, reset, load, en;
input [3:0] D;
output [3:0] Q;
output C;
reg  [3:0] Q ;
always@(posedge reset or posedge clock)beginif(reset == 1)Q <= 4'd0;else if(load == 1)Q <= D;else if(en)Q <= Q;else if(Q == 9)Q <= 0;else Q <= Q + 1;
end
assign C = (Q == 9);
endmodule


4、下降沿触发D触发器
RTL电路图

module mydff(Q, Qbar, D, clock);
input D, clock;
output Q, Qbar;
reg Q, Qbar;
always@(negedge clock) beginQ <= D;Qbar <= ~D;
end
endmodule

仿真结果如图所示

声明:该文只适用于学习,其内容包含来自书本的摘抄和总结,欢迎大家补充,共同学习进步。

FPGA数字系统设计(4)——行为级建模相关推荐

  1. 《Verilog HDL与FPGA数字系统设计》书籍试读体验

    文章目录 前言 第一部分:数字系统基础 第二部分:数字系统设计实践 第三部分:可编程片上系统 总结 前言 最近参加一个面包板社区的图书试读活动:<Verilog HDL与FPGA数字系统设计&g ...

  2. FPGA数字系统设计(6)——时序逻辑电路设计

    用always@(posedge clk)描述 时序逻辑电路的基础--计数器(在每个时钟的上升沿递增1) 例1.四位计数器(同步使能.异步复位) // Module Name: counter_4bi ...

  3. FPGA数字系统设计(9)——信号产生

    信号的数字化需要3个步骤:抽样.量化和编码.抽样是指用每隔一定时间的信号样值序列来代替原来在时间上的连续信号,也就是在时间上将模拟信号离散化.量化使用有限个幅度值来近似原来连续变化的幅度值,把模拟信号 ...

  4. FPGA数字系统设计(8)——可综合电路及状态机

    一.可综合电路 行为级可综合语法和数据流级语法合在一起被称为RTL级,该级别的模型是可以被综合成电路进而实现的. 1.module 和endmodule 作为模块声明的关键字,必然是可以被综合的. 2 ...

  5. 【 FPGA 】数字系统设计方法的演变

    前几天无意中打开了Vivado HLS这个设计工具,并看了几眼数据手册,大概是说有种更高抽象级别的设计方式,当然我是不知道的,也没有深究,今天看到<基于FPGA的数字信号处理>这本书,提到 ...

  6. FPGA数字信号处理(十六)单级CIC滤波器Verilog设计

    该篇是FPGA数字信号处理的第16篇,选题为多速率信号处理系统中常用的CIC滤波器.本文将详细介绍使用Verilog HDL设计单级CIC滤波器的方法.接下来几篇会介绍多级CIC滤波器的Verilog ...

  7. FPGA数字信号处理(20)单级半带(HB)滤波器设计

    本篇是FPGA数字信号处理的第20篇,前面介绍了多速率信号处理系统中用到的多速率FIR滤波器.CIC滤波器,本文将介绍另一种常用的半带滤波器(Half-Band Filter)的相关知识及设计方法.本 ...

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

  9. Verilog语言与数字系统设计

    学习Verilog语言必要的基础知识 计算机导论 数字逻辑或数字电路与逻辑设计 计算机科学概论 拓展学习: 计算机组成原理 计算机体系结构 学习视频链接: 基于FPGA的Verilog语法基础课程(至 ...

最新文章

  1. sed 命令自己总结
  2. 【机器学习】逻辑回归代码练习
  3. liferay如何在struts2中調用ajax
  4. python运维开发_Python自动化运维开发----基础(一)
  5. oracle exp调过坏块,无备份坏块处理(跳过方式)
  6. ETL__pentaho__SPOON_PDI
  7. 如何解决第三方JavaScript引入工程后报错
  8. Entity Framework 4.1 - Code First 指定外键名称
  9. coreseek java_基于Sphinx的中文全文检索引擎Coreseek的安装
  10. JDY-16 蓝牙4.2模块串口测试方法
  11. 设计参考之不凡的日本LOGO
  12. siri中文语音助理_针对“语音助手”类产品,浅谈对话式交互设计
  13. ElasticSearch--Field的使用
  14. 从零开始实现图片加载特效之黑白照片、倒影图片、图片蒙版
  15. 人类创造的工具是不是人工智能?
  16. JavaScript 日期操作我不知道的事情
  17. 关于DNS的配套工具
  18. 【历史上的今天】7 月 7 日:C# 发布;Chrome OS 问世;《仙剑奇侠传》发行
  19. 始祖双碳新闻 | 2022年8月12日碳中和行业早知道
  20. 从黑天鹅事件到墨菲定律

热门文章

  1. Weevely——Linux中的菜刀
  2. 统一OneNote的输入字体
  3. 计算机和计算器有什么区别?
  4. 异常检测论文常用英文写法(持续更新......)
  5. 数字货币的旁观者:我们为什么说区块链商业化时机还未到来?
  6. Nordic52840快速开发蓝牙网关
  7. 解决Android5.1系统下音频Xrun(underrun或overrun)问题
  8. 企业如何做好微信推广营销——类聚平台来指导
  9. 数独——个人项目(项目地址)
  10. nginx php 文件未找到,Linux下搭建nginx+php环境的file not found问题反省