Verilog HDL数据流建模与运算符

简介: ⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
🔥文章和代码已归档至【Github仓库: hardware-tutorial】,需要的朋友们自取。或者关注公众号【AIShareLab】,回复 FPGA 也可获取。

对于基本单元逻辑电路,使用Verilog语言提供的门级元件模型描述电路非常方便。

但随着电路复杂性的增加,使用的逻辑门较多时,使用HDL门级描述的工作效率就很低。

数据流建模能够在较高的抽象级别描述电路的逻辑功能,并且通过逻辑综合软件,能够自动地将数据流描述转换成为门级电路。

数据流建模主要使用逻辑表达式,所以要了解各种运算符和表达式。

数据流建模

数据流建模使用的连续赋值语句,由关键词assign开始,后面跟着由操作数和运算符等组成的逻辑表达式。

一般用法如下:

wire [位宽说明] 变量名1,变量名2,……,变量名n;
assign 变量名=表达式;

注意,assign 语句只能对wire型变量进行赋值,所以等号左边变量名的数据类型必须是wire型。

例:用数据流描述方式建立模型

$Y=D_{0} \cdot \bar{S}+D_{1} \cdot S$

module mux2to1_dataflow(D0, D1, S, Y );
  input D0, D1, S;  
  output Y;
  wire Y ; 

//下面是逻辑功能描述
  assign Y = (~S & D0) | (S & D1);  //表达式左边Y必须是wire型

endmodule           

例:用条件运算符描述2选1的数据选择器。

module mux2x1_df (D0,D1,S,L);
   input D0,D1,S;
   output L;

   assign L = S ? D1 : D0;

endmodule

条件运算符:如果S=1,则输出L=D1;否则L=D0。

例:用数据流建模方法对2线-4线译码器的行为进行描述。

module decoder_df (A1,A0,E,Y);
   input A1,A0,E;
   output [3:0] Y;
       assign Y[0] = ~(~A1 & ~A0 & ~E);
       assign Y[1] = ~(~A1 &   A0 & ~E);
       assign Y[2] = ~(  A1 & ~A0 & ~E);
       assign Y[3] = ~(  A1 &   A0 & ~E);
endmodule

运算符及其优先级

运算符 (9类)

位拼接运算符

作用是将两个或多个信号的某些位拼接起来成为一个新的操作数,进行运算操作。

设A=1’b1,B=2’b10,C=2’b00

则{B,C}=4’b1000
{A,B[1],C[0]}=3’b110
{A,B,C,3’b101}=8’b11000101。

对同一个操作数的重复拼接还可以双重大括号构成的运算符{{}}

例如{4{A}}=4’b1111,{2{A},2{B},C}=8’b11101000。

A:4’b1010 、B:4’b1111,

相等与全等运算符

==(逻辑相等), !=(逻辑不等)
===(条件全等),!==(条件不全等)

a、b的初值同为4’b0100,c和d的初值同为4’b10x0

a= =b a!=b a= = =b a!= =b
1 0 1 0
c= =d c!=d c= = =d c!= =d
x x 1 0

条件运算符

是三目运算符,运算时根据条件表达式的值选择表达式。

一般用法:

condition_expr ? expr1 : expr2;

首先计算第一个操作数condition_expr的值,如果结果为逻辑1,则选择第二个操作数expr1的值作为结果返回;如果结果为逻辑0,则选择第三个操作数expr2的值作为结果返回。

运算符的优先级

优先级的顺序从下向上依次增加。

类型 符号 优先级别
取反 ! ~ -(求2的补码) 最高优先级
算术 * / + -
移位 >> <<
关系 < <= > >=
等于 == !=
缩位 & ~& ^ ^~ **\ ~\ **
逻辑 && **\ \ **
条件 ?: 最低优先级

参考文献:

  1. Verilog HDL与FPGA数字系统设计,罗杰,机械工业出版社,2015年04月
  2. Verilog HDL与CPLD/FPGA项目开发教程(第2版), 聂章龙, 机械工业出版社, 2015年12月
  3. Verilog HDL数字设计与综合(第2版), Samir Palnitkar著,夏宇闻等译, 电子工业出版社, 2015年08月
  4. Verilog HDL入门(第3版), J. BHASKER 著 夏宇闻甘伟 译, 北京航空航天大学出版社, 2019年03月

欢迎关注公众号【AIShareLab】,一起交流更多相关知识,前沿算法,Paper解读,项目源码,面经总结。

目录
相关文章
|
算法 异构计算
Verilog HDL门级建模
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
97 0
Verilog HDL门级建模
|
算法 异构计算
Verilog HDL行为级建模
⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。
86 0
Verilog HDL行为级建模
|
异构计算
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(中)
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑
210 0
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(中)
|
存储 开发工具 异构计算
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(下)
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑
650 0
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(下)
|
算法 芯片 计算机视觉
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(上)
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑
593 0
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(上)
|
算法
Verilog语法入门(一)简单组合逻辑电路
Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。
117 0
|
4天前
|
算法 关系型数据库 计算机视觉
基于FPGA的9/7整数小波变换和逆变换verilog实现,包含testbench
基于FPGA的9/7整数小波变换和逆变换verilog实现,包含testbench
|
11月前
|
存储 缓存 算法
m基于FPGA的交织解交织系统verilog实现,包含testbench
m基于FPGA的交织解交织系统verilog实现,包含testbench
231 0
|
芯片 异构计算
第三章 硬件描述语言verilog(三)功能描述-时序逻辑
第三章 硬件描述语言verilog(三)功能描述-时序逻辑
190 0
第三章 硬件描述语言verilog(三)功能描述-时序逻辑
|
开发工具 芯片 异构计算
Verilog 设计方法
Verilog 的设计多采用自上而下的设计方法(top-down)。即先定义顶层模块功能,进而分析要构成顶层模块的必要子模块;然后进一步对各个模块进行分解、设计,直到到达无法进一步分解的底层功能块。这样,可以把一个较大的系统,细化成多个小系统,从时间、工作量上分配给更多的人员去设计,从而提高了设计速度,缩短了开发周期。
121 1