第3章——VerilogHDL硬件描述语言_第1页
第3章——VerilogHDL硬件描述语言_第2页
第3章——VerilogHDL硬件描述语言_第3页
第3章——VerilogHDL硬件描述语言_第4页
第3章——VerilogHDL硬件描述语言_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、12提纲提纲v 什么是什么是Verilog HDL?v Verilog HDL vs. VHDLv Verilog HDL语法语法v 设计描述层次设计描述层次v 设计的测试与验证设计的测试与验证v 可综合的设计可综合的设计v 有限状态机(有限状态机(FSM)v 一个除法器的设计实例一个除法器的设计实例v 常用仿真器和综合软件常用仿真器和综合软件v 网络资源网络资源3什么是什么是Verilog HDL?Verilog HDL?vVerilog HDL是一种硬件描述语言,用于从算法是一种硬件描述语言,用于从算法级、结构级、门级到开关级的多种抽象设计层次级、结构级、门级到开关级的多种抽象设计层次的数

2、字系统建模。的数字系统建模。v被建模的数字系统对象的复杂性可以介于开关级被建模的数字系统对象的复杂性可以介于开关级电路(例如电路(例如pmos/nmos)、简单的门(例如库)、简单的门(例如库单元描述)和完整的复杂电子数字系统之间(例单元描述)和完整的复杂电子数字系统之间(例如如CPU)4什么是什么是Verilog HDL? (cont.)Verilog HDL? (cont.)vVerilog HDL 语言具有下述描述能力:语言具有下述描述能力: 设计的行为特性、设计的数据流特性、设计的结构组设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产成以及包

3、含响应监控和设计验证方面的时延和波形产生机制。生机制。 提供了编程语言接口(提供了编程语言接口(PLI),通过该接口可以在模拟、),通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制验证期间从设计外部访问设计,包括模拟的具体控制和运行。和运行。 支持多个设计层次的混合层次建模支持多个设计层次的混合层次建模5更重要的是更重要的是.vVerilog HDL语言与语言与C语言很相似,从语言很相似,从C语言中继语言中继承了多种操作符和结构,其核心子集非常易于学承了多种操作符和结构,其核心子集非常易于学习和使用而这对大多数建模应用来说这已经习和使用而这对大多数建模应用来说这已经足够。足

4、够。6Verilog HDLVerilog HDL的历史的历史v 最初是于最初是于1 9 8 3年由年由Gateway Design Automation 公司公司(后被(后被Cadence Design Systems公司收购)为其模拟器产公司收购)为其模拟器产品开发的硬件建模语言。那时它只是一种专用语言,由于他品开发的硬件建模语言。那时它只是一种专用语言,由于他们的模拟、仿真器产品的广泛使用,们的模拟、仿真器产品的广泛使用,Verilog HDL 作为一种作为一种便于使用且实用的语言逐渐为众多设计者所接受。便于使用且实用的语言逐渐为众多设计者所接受。v Verilog HDL语言于语言于1

5、 9 9 0年被推向公众领域。年被推向公众领域。Open Verilog International(O V I)是促进)是促进Ve r i l o g发展的国发展的国际性组织,际性组织,1 9 9 2年,年, O V I决定致力于推广决定致力于推广Verilog OVI标标准成为准成为I E E E标准。这一努力最后获得成功,标准。这一努力最后获得成功, Verilog 语言语言于于1 9 9 5年成为年成为I E E E标准,称为标准,称为IEEE Std1 3 6 41 9 9 5。完整的标准在。完整的标准在Ve r i l o g硬件描述语言参考手册中有详细硬件描述语言参考手册中有详细

6、描述。描述。7Verilog HDL vs. VHDLVerilog HDL vs. VHDLv Verilog HDL 和和VHDL 都是用于逻辑设计的硬件描述语言并且都是用于逻辑设计的硬件描述语言并且都已成为都已成为IEEE 标准。标准。VHDL 是在是在1987 年成为年成为IEEE 标准,标准,Verilog HDL 则在则在1995 年才正式成为年才正式成为IEEE 标准。标准。v Verilog HDL 和和VHDL 共同的特点共同的特点: 能形式化地抽象表示电路的行为和结构能形式化地抽象表示电路的行为和结构 支持逻辑设计中层次与范围的描述,可借用高级语言的精巧支持逻辑设计中层次与

7、范围的描述,可借用高级语言的精巧结构来简化电路行为的描述结构来简化电路行为的描述 具有电路仿真与验证机制以保证设计的正确性具有电路仿真与验证机制以保证设计的正确性 支持电路描述由高层到低层的综合转换支持电路描述由高层到低层的综合转换 硬件描述与实现工艺无关,有关工艺参数可通过语言提供的硬件描述与实现工艺无关,有关工艺参数可通过语言提供的属性包括进去便于文档管理易于理解和设计重用。属性包括进去便于文档管理易于理解和设计重用。8Verilog HDL vs. VHDL (cont.)Verilog HDL vs. VHDL (cont.)v Verilog HDL 和和VHDL 又各有其自己的特点

8、:又各有其自己的特点: Verilog HDL 拥有更广泛的设计群体,成熟的资源也拥有更广泛的设计群体,成熟的资源也远比远比VHDL 丰富丰富 Verilog HDL 是一种非常容易掌握的硬件描述语言是一种非常容易掌握的硬件描述语言(类(类C语言),而掌握语言),而掌握VHDL 设计技术就相对比较困难设计技术就相对比较困难(类(类Ada语言)。语言)。 一般认为一般认为Verilog HDL 在系统级抽象方面比在系统级抽象方面比VHDL 略略差一些而在门级开关电路描述方面比差一些而在门级开关电路描述方面比VHDL 强得多强得多 大学、研究机构更多使用大学、研究机构更多使用VHDL,而工业界更多

9、使用,而工业界更多使用Verilog HDL9提纲提纲v 什么是Verilog HDL?v Verilog HDL vs. VHDLv Verilog HDL语法v 设计描述层次v 设计的测试与验证v 可综合的设计v 有限状态机(FSM)v 一个除法器的设计实例v 常用仿真器和综合软件v 网络资源10/ sampel_reg.v / sampel_reg.v 数据采样模块数据采样模块module sample_reg(clk, rst, din, dout);module sample_reg(clk, rst, din, dout);input clk, rst;input clk, rst

10、;input 3:0 din;input 3:0 din;output 3:0 dout;output 3:0 dout;reg 3:0 data;reg 3:0 data;assign dout = data;assign dout = data;always (posedge clk or negedge rst)always (posedge clk or negedge rst)beginbeginif(!rst) beginif(!rst) begin data = 4b0; data = 4b0;end else beginend else begin data = din; da

11、ta , =, =v 相等操作符:相等操作符:=, !=, =, !=v 逻辑操作符:逻辑操作符:&, |, !v 按位操作符:按位操作符:, &, |, , , v 归约操作符:归约操作符:&, &, |, |, , v 移位操作符:移位操作符:v 条件操作符:条件操作符:exp ? exp1 : exp2;v 连接和复制操作符:连接和复制操作符:exp1, exp2, repexpassign bus3:0 = bus0, bus1, bus2, bus3; /反转反转assign bus3:0 = 2bus0, 2bus3; /扩展扩展19Verilog

12、HDLVerilog HDL语法语法 过程结构过程结构vinitial语句:只执行一次,并在模拟开语句:只执行一次,并在模拟开始时执行,即在始时执行,即在0时刻开始执行。通常时刻开始执行。通常用于初始化(例如赋给寄存器一个初用于初始化(例如赋给寄存器一个初始值)、波形产生和仿真控制始值)、波形产生和仿真控制valways语句:也是在语句:也是在0时刻开始执行,时刻开始执行,但是在整个仿真期间被反复多次执行但是在整个仿真期间被反复多次执行vinitial块和块和always块内部的语句顺序块内部的语句顺序执行执行v一个模块中可以包含任意多个一个模块中可以包含任意多个initial或或always

13、语句。这些语句相互并行执行,语句。这些语句相互并行执行,即这些语句的执行顺序与其在模块中即这些语句的执行顺序与其在模块中的顺序无关。一个的顺序无关。一个initial语句或语句或always语句的执行产生一个单独的控语句的执行产生一个单独的控制流制流v注意注意#的时延控制用法的时延控制用法initialinitialbeginbeginreset = 0;reset = 0;a = 4b0101a = 4b0101b = 4b1010;b = 4b1010;#20#20 reset = 1; reset = 1;#50#50 $display(“sum is %d”, sum); $displ

14、ay(“sum is %d”, sum);$finish;$finish;endendalways (always (posedgeposedge clk or clk or negedgenegedge reset) reset)beginbeginif(!reset) beginif(!reset) begindata = 0;data = 0;end else beginend else begindata = din;data = din;endendendend20Verilog HDLVerilog HDL语法语法 表达式表达式v 线网类型使用线网类型使用assign语句赋值,称为

15、连续赋值语句赋值,称为连续赋值v 寄存器使用寄存器使用“=”或或”=“赋值,并赋值,并只能用于只能用于initial、always、task和和function块内!块内!注意两者区别:注意两者区别:a = b; /执行到此语句后执行到此语句后a的值马上更新为的值马上更新为b,称为阻塞性赋值,称为阻塞性赋值a 10) beginresult = 123;end else if(a0) beginroll = roll 1;cnt = cnt - 1;endfor(cnt=0; cnt 1;end24Verilog HDLVerilog HDL语法语法 函数与任务函数与任务vVerilog HD

16、L还定义了函数还定义了函数(function)和任务和任务(task),可以用于完成复杂的行为描述,可以用于完成复杂的行为描述v函数只能有一个输出,而任务可以具有多个输函数只能有一个输出,而任务可以具有多个输出;两者都可以有多个输入出;两者都可以有多个输入v函数和任务必须定义在函数和任务必须定义在module内内25Verilog HDLVerilog HDL语法语法 顺序执行与并行执行顺序执行与并行执行vinitial, always, function, task块内部的语句是块内部的语句是顺序执行的,所有顺序执行的,所有begin . end之间的语句也是之间的语句也是顺序执行的顺序执行

17、的v同一个模块内部的所有同一个模块内部的所有initial, always块都是并块都是并行执行的行执行的vfork . join块之间的语句是并行执行的(略)块之间的语句是并行执行的(略)26Verilog HDLVerilog HDL语法语法 编译指令编译指令v 以以(反引号)开始的某些标识符是编译器指令。在(反引号)开始的某些标识符是编译器指令。在Verilog 语言编译时,特语言编译时,特定的编译器指令在整个编译过程中有效(编译过程可跨越多个文件),直到定的编译器指令在整个编译过程中有效(编译过程可跨越多个文件),直到遇到其它的不同编译程序指令。完整的标准编译器指令如下遇到其它的不同编

18、译程序指令。完整的标准编译器指令如下: define, undef define, undef 宏定义,类似于宏定义,类似于#define #undef#define #undef,例如:,例如: define MAX_BUS_SIZE define MAX_BUS_SIZE3232. . . . .reg MAX_BUS_SIZE-1:0 AddReg; reg MAX_BUS_SIZE-1:0 AddReg; 注意引用时要加注意引用时要加 ifdef, else, endif ifdef, else, endif 类似于类似于#ifdef #else #endif#ifdef #else

19、#endif include include 类似于类似于#include#include,用于包含另外一个,用于包含另外一个verilogverilog文件文件 timescale timescale resetallresetall default_nettypedefault_nettypev unconnected_drive, nounconnected_driveunconnected_drive, nounconnected_drive celldefine, endcelldefinecelldefine, endcelldefine27Verilog HDLVerilog H

20、DL语法语法 编译指令编译指令(cont.)(cont.) timescale timescale 定义定义时延时延单位和精度单位和精度在在Verilog HDL Verilog HDL 模型中,所有时延都用单位时间表模型中,所有时延都用单位时间表述。使用该指令将时间单位与实际时间相关联。指述。使用该指令将时间单位与实际时间相关联。指令格式为:令格式为: timescale timescale time_unit time_unit / / time_precisiontime_precision time_unit time_unit 和和 time_precisiontime_precis

21、ion由值由值1 1、1010、和、和100100以及单位以及单位s s、msms、usus、nsns、psps和和fsfs组成。例如:组成。例如:timescale 1ns / 100pstimescale 1ns / 100ps表示时延单位为表示时延单位为1ns, 1ns, 时延精度为时延精度为100ps100ps。timescale timescale 编译器指令在模块说明外部出现编译器指令在模块说明外部出现, , 并并且影响后面所有的时延值。且影响后面所有的时延值。28Verilog HDLVerilog HDL语法语法 系统函数系统函数v 以以$ $字符开始的标识符表示系统任务或系统

22、函数。任务提供了一种封字符开始的标识符表示系统任务或系统函数。任务提供了一种封装行为的机制,可在设计的不同部分被调用。任务可以返回装行为的机制,可在设计的不同部分被调用。任务可以返回0 0个或多个或多个值。函数除只能返回一个值以外与任务相同。此外,函数在个值。函数除只能返回一个值以外与任务相同。此外,函数在0 0时刻时刻执行,即不允许延迟,而任务可以带有延迟。执行,即不允许延迟,而任务可以带有延迟。v $display $monitor $strobe$display $monitor $strobe v $time$time $stime $realtime $printtimescale

23、$timeformat $stime $realtime $printtimescale $timeformat v $stop $finish $stop $finish v $fopen $fclose $fdisplay $fwrite $fmonitor $fstrobe $fopen $fclose $fdisplay $fwrite $fmonitor $fstrobe $readmemb $readmemb $readmemh$readmemhv $rtoi $itor $realtobits $bittoreal$rtoi $itor $realtobits $bittorea

24、lv $random$randomv 例如:例如:$display (“hello world!”); /$display (“hello world!”); /打印输出打印输出hello worldhello world$time /$time /该系统任务返回当前的模拟时间。该系统任务返回当前的模拟时间。29提纲提纲v 什么是Verilog HDL?v Verilog HDL vs. VHDLv Verilog HDL语法v设计描述层次v 设计的测试与验证v 可综合的设计v 有限状态机(FSM)v 一个除法器的设计实例v 常用仿真器和综合软件v 网络资源30设计描述层次设计描述层次v算法(

25、行为)级描述算法(行为)级描述v结构级描述结构级描述v寄存器传输级(寄存器传输级(RTL)描述)描述v开关级(门级)描述开关级(门级)描述v混合层次描述混合层次描述31设计描述层次设计描述层次 - - 算法(行为)级描述算法(行为)级描述v 主要用于快速验证算主要用于快速验证算法的正确性法的正确性v 不一定可以综合成实不一定可以综合成实际电路结构际电路结构实例:n位整数除法器, D = A/B, R = A%Bmodule div (A, B, D, R);parameter n = 32;input n-1:0 A, B;output n-1:0 D, R;reg n-1:0 D, R;al

26、ways (A or B)begin D = 0; for(R=A; RB; R = R - B) begin D = D + 1; endendendmodule32设计描述层次设计描述层次 结构级描述结构级描述v 更接近电路的实际结构更接近电路的实际结构v 电路的层次化描述电路的层次化描述v 类似于电路框图类似于电路框图module HA(A , B , S , C)module HA(A , B , S , C);input A, B;input A, B;output S, C;output S, C;parameter AND_DELAY = 1, XOR_DELAY = 2;par

27、ameter AND_DELAY = 1, XOR_DELAY = 2;assign #XOR_DELAYS = A Bassign #XOR_DELAYS = A B;assign #AND_DELAYC = A & Bassign #AND_DELAYC = A & B;endmoduleendmodulemoduleFA(P, Q, Cin, Sum, Cout ) ;moduleFA(P, Q, Cin, Sum, Cout ) ;input P, Q, Cin;input P, Q, Cin;output Sum, Cout;output Sum, Cout;para

28、meter OR_DELAY = 1;parameter OR_DELAY = 1;wire S1, C1, C2;wire S1, C1, C2;/两个模块实例语句两个模块实例语句HA h1 (P, Q, S1, C1); /HA h1 (P, Q, S1, C1); /通过位置关联。通过位置关联。HA h2 ( .A(C i n), .S(S u m), .B(S 1), .C(C 2); /HA h2 ( .A(C i n), .S(S u m), .B(S 1), .C(C 2); /通过端口通过端口与信号的名字关联。与信号的名字关联。/门实例语句:门实例语句:or #OR_DELAY

29、O1 (Cout, C1, C2) ;or #OR_DELAYO1 (Cout, C1, C2) ;endmoduleendmodule使用两个半加器模使用两个半加器模块构造的全加器块构造的全加器33设计描述层次设计描述层次 - RTL- RTL级描述级描述v 贴近实际电路结构的贴近实际电路结构的描述描述v 描述的细节到寄存器描述的细节到寄存器内容传输级别内容传输级别v 可以精确描述电路的可以精确描述电路的工作原理、执行顺序工作原理、执行顺序v 细化到寄存器级别的细化到寄存器级别的结构描述也就是结构描述也就是RTL级级描述,并无绝对划分描述,并无绝对划分标准标准module sample_re

30、g(clk, rst, din, dout);input clk, rst;input 3:0 din;output 3:0 dout;reg 3:0 data;assign dout = data;always (posedge clk or negedge rst)beginif(!rst) begin data = 4b0;end else begin data = din;endendendmodule34设计描述层次设计描述层次 开关级(门级)描述开关级(门级)描述v 完整描述了电路的细节完整描述了电路的细节v 最底层的电路描述最底层的电路描述v 可以描述可以描述pmos/nmosm

31、odule MUX4x1(Z, D0, D1, D2, D3, S0, S1);module MUX4x1(Z, D0, D1, D2, D3, S0, S1);output Z;output Z;input D0, D1, D2, D3, S0, S1;input D0, D1, D2, D3, S0, S1;andand u0 (T0, D0, S0bar, S1bar) , u0 (T0, D0, S0bar, S1bar) , u1 u1(T1, D1, S0bar, S1),T1, D1, S0bar, S1), u2 (T2, D2, S0, S1bar), u2 (T2, D2,

32、 S0, S1bar), u3 (T3, D3, S0, S1) , u3 (T3, D3, S0, S1) ,notnot u4 (S0bar, S0), u4 (S0bar, S0), u5 (S1bar, S1); u5 (S1bar, S1);oror u6 (Z, T0, T1, T2, T3); u6 (Z, T0, T1, T2, T3);endmoduleendmodule4路选路选1多选器多选器35设计描述层次设计描述层次 混合层次描述混合层次描述v 以上各种层次描述方式可以任意混合使用,因此一个设以上各种层次描述方式可以任意混合使用,因此一个设计可能某些模块使用了行为描述的

33、方式,而另外一些模计可能某些模块使用了行为描述的方式,而另外一些模块使用了开关级描述块使用了开关级描述v 在实际设计中,功能复杂的模块可以先用行为级或结构在实际设计中,功能复杂的模块可以先用行为级或结构级的描述来表示,而对功能简单的模块则使用级的描述来表示,而对功能简单的模块则使用RTL级的级的描述,以尽早完成系统的仿真和算法的验证;在设计的描述,以尽早完成系统的仿真和算法的验证;在设计的过程中逐步细化复杂模块,替代原来的行为描述,直至过程中逐步细化复杂模块,替代原来的行为描述,直至设计可以综合并满足设计指标设计可以综合并满足设计指标36提纲提纲v 什么是Verilog HDL?v Veril

34、og HDL vs. VHDLv Verilog HDL语法v 设计描述层次v设计的测试与验证v 可综合的设计v 有限状态机(FSM)v 一个除法器的设计实例v 常用仿真器和综合软件v 网络资源37设计的测试与验证设计的测试与验证v 一般需要编写测试文件对设计进行仿真测试,称为一般需要编写测试文件对设计进行仿真测试,称为testbenchv testbench一般采用行为级描述,产生一定的输入激励,一般采用行为级描述,产生一定的输入激励,得到设计的输出响应,并检查输出结果的正确性得到设计的输出响应,并检查输出结果的正确性v 在规范的模块设计中,每一个模块都需要编写独立的测在规范的模块设计中,每

35、一个模块都需要编写独立的测试文件对模块进行充分的测试试文件对模块进行充分的测试v 注意选择合适的输入激励,保证测试能够覆盖典型输入注意选择合适的输入激励,保证测试能够覆盖典型输入和特殊输入和特殊输入38/ sampel_reg.v / sampel_reg.v 数据采样模块数据采样模块module sample_reg(clk, rst, din, dout);module sample_reg(clk, rst, din, dout);input clk, rst;input clk, rst;input 3:0 din;input 3:0 din;output 3:0 dout;outpu

36、t 3:0 dout;reg 3:0 data;reg 3:0 data;assign dout = data;assign dout = data;always (posedge clk or negedge rst)always (posedge clk or negedge rst)beginbeginif(!rst) beginif(!rst) begin data = 4b0; data = 4b0;end else beginend else begin data = din; data , =, , , , &(按位与)(按位与), |(按位或),(按位或), (连接运算

37、)等位(连接运算)等位操作运算符操作运算符v ,=,assign等赋值语句等赋值语句v always块块42不可综合的语法举例不可综合的语法举例v initial块块v forever块块v for, while, repeat, force, release, task, enable, disable一般不可综合(注:某些特定情况下一般不可综合(注:某些特定情况下for和和while等可能可等可能可以综合)以综合)v 系统函数如系统函数如$display等等v 除法,求模运算,实数运算等复杂算术运算一般不可综合除法,求模运算,实数运算等复杂算术运算一般不可综合(注:可能极少数综合器有库可以

38、引用,可以综合)(注:可能极少数综合器有库可以引用,可以综合)v #延时赋值语句一般综合时会被忽略延时赋值语句一般综合时会被忽略v . .43可综合的设计举例可综合的设计举例(1)(1)module sample_reg(clk, rst, din, dout);module sample_reg(clk, rst, din, dout);input clk, rst;input clk, rst;input 3:0 din;input 3:0 din;output 3:0 dout;output 3:0 dout;reg 3:0 data;reg 3:0 data;assign dout =

39、 data;assign dout = data;always (posedge clk or negedge rst)always (posedge clk or negedge rst)beginbeginif(!rst) beginif(!rst) begin data = 4b0; data = 4b0;end else beginend else begin data = din; data = din;endendendendendmoduleendmodule这是一个采样锁存模块,在时钟这是一个采样锁存模块,在时钟上升沿锁存输入数据上升沿锁存输入数据din到寄存到寄存器器data

40、(四位)中,(四位)中,dout连到连到data寄存器的输出。寄存器的输出。 data对应对应的是带复位端的寄存器,其时钟的是带复位端的寄存器,其时钟信号为信号为clk(上升沿有效上升沿有效),复位信,复位信号为号为rst(低电平有效)(低电平有效)clkrstdin3:0dout3:0data3:0DQRSTCK44可综合的设计举例可综合的设计举例(2)(2)module sample_latch(clk, rst, din, dout);module sample_latch(clk, rst, din, dout);input clk, rst;input clk, rst;input

41、3:0 din;input 3:0 din;output 3:0 dout;output 3:0 dout;reg 3:0 data;reg 3:0 data;assign dout = data;assign dout = data;always (clk or rst)always (clk or rst)beginbeginif(!rst) beginif(!rst) begin data = 4b0; data = 4b0;else if(clk) beginelse if(clk) begin data = din; data = din;endendendendendmodulee

42、ndmodule这也是一个采样锁存模块,这也是一个采样锁存模块,但是但是data对应的不是寄存对应的不是寄存器(器(register)而是锁存器)而是锁存器(latch)clkrstdin3:0dout3:0data3:0DQRSTENA45可综合的设计举例可综合的设计举例(3)(3)module mux4(sel, a, b, c, d, r);module mux4(sel, a, b, c, d, r);input 1:0 sel;input 1:0 sel;input a, b, c, d;input a, b, c, d;output r;output r;reg r;reg r;a

43、lways (sel or a or b or c or d)always (sel or a or b or c or d)beginbegincase(sel)case(sel) 2b00 : r = a; 2b00 : r = a; 2b01 : r = b; 2b01 : r = b; 2b10 : r = c; 2b10 : r = c; 2b11 : r = d; 2b11 : r = d;endcaseendcaseendendendmoduleendmodule这是一个四选一的多选器,虽这是一个四选一的多选器,虽然用了然用了always块,但是对应的块,但是对应的电路结构是一个

44、纯组合逻辑电路结构是一个纯组合逻辑sel1:0abcdr46提纲提纲v 什么是Verilog HDL?v Verilog HDL vs. VHDLv Verilog HDL语法v 设计描述层次v 设计的测试与验证v 可综合的设计v有限状态机(FSM)v 一个除法器的设计实例v 常用仿真器和综合软件v 网络资源47有限状态机(有限状态机(FSMFSM)v 状态机是绝大部分控制电路的核心结构状态机是绝大部分控制电路的核心结构v 有限状态机可以使用有限状态机可以使用always语句和语句和case语句描述,状态语句描述,状态保存在寄存器中,根据寄存器不同的值(状态)执行不同保存在寄存器中,根据寄存器

45、不同的值(状态)执行不同的操作,的操作,case语句的多个分支则代表了不同状态的行为语句的多个分支则代表了不同状态的行为v moore有限状态机:输出仅依赖于内部状态,跟输入无关有限状态机:输出仅依赖于内部状态,跟输入无关v mealy有限状态机:输出不仅决定于内部状态,还跟外部有限状态机:输出不仅决定于内部状态,还跟外部输入有关输入有关48mooremoore有限状态机实例有限状态机实例module moore_fsm(clk, reset, A, Z, finish);module moore_fsm(clk, reset, A, Z, finish);parameter STATE_IN

46、IT = 0;parameter STATE_INIT = 0;parameter STATE_ST1 = 1;parameter STATE_ST1 = 1;parameter STATE_ST2 = 2;parameter STATE_ST2 = 2;parameter STATE_FINISH = 3;parameter STATE_FINISH = 3;input clk, reset;input clk, reset;input A;input A;output 1:0 Z;output 1:0 Z;output finish;output finish;reg 1:0 state;

47、reg 1:0 state;reg 1:0 Z;reg 1:0 Z;reg finishreg finishalwaysalways (negedge reset or posedge clk) (negedge reset or posedge clk)beginbegin if(!reset) begin if(!reset) begin state = STATE_INIT; state = STATE_INIT; Z = 2b00; Z = 2b00; finish = 1b0; finish = 1b0; end else begin end else begin case(stat

48、e)case(state) STATE_INIT: begin STATE_INIT: begin state = STATE_ST1;state = STATE_ST1; Z = 2b01; Z = 2b01; finish = 1b0; finish = 1b0; end end STATE_ST1: begin STATE_ST1: begin if(A) state = STATE_ST2;if(A) state = STATE_ST2; else state = STATE_FINISH; else state = STATE_FINISH; Z = 2b11; Z = 2b11;

49、finish = 1b0; finish = 1b0; end end STATE_ST2: begin STATE_ST2: begin state = STATE_FINISH;state = STATE_FINISH; Z = 2b10; Z = 2b10; finish = 1b0; finish = 1b0; end end STATE_FINISH: begin STATE_FINISH: begin /state = STATE_FINISH;/state = STATE_FINISH; Z = 2b01; Z = 2b01; finish = 1b1; finish = 1b1

50、; end end endcaseendcase end end endendendmoduleendmodule49mooremoore有限状态机实例有限状态机实例(cont.cont.)STATE_ST1STATE_ST1STATE_INITSTATE_INITSTATE_ST2STATE_ST2STATE_FINISHSTATE_FINISHreset=1, A = 1reset=1, A = 1reset=1, A = 0reset=1, A = 0reset = 0reset = 0reset = 1reset = 1reset=1reset=1reset=1reset=1reset

51、 = 0reset = 0reset = 0reset = 050mealymealy有限状态机实例有限状态机实例module mealy_fsm(clk, reset, A, Z, finish);module mealy_fsm(clk, reset, A, Z, finish);parameter STATE_INIT = 4b0001;parameter STATE_INIT = 4b0001;parameter STATE_ST1 = 4b0010;parameter STATE_ST1 = 4b0010;parameter STATE_ST2 = 4b0100;parameter

52、STATE_ST2 = 4b0100;parameter STATE_FINISH = 4b1000;parameter STATE_FINISH = 4b1000;input clk, reset;input clk, reset;input A;input A;output 1:0 Z;output 1:0 Z;output finish;output finish;reg 3:0 current_state, next_state;reg 3:0 current_state, next_state;reg 1:0 Z;reg 1:0 Z;reg finish;reg finish;alw

53、ays (negedge reset or posedge clk)always (negedge reset or posedge clk)beginbeginif(!reset) current_state = STATE_INIT;if(!reset) current_state = STATE_INIT;else current_state = next_state;else current_state = next_state;endendalways (currenet_state or A)always (currenet_state or A)beginbeginfinish

54、= 1b0;finish = 1b0;case(current_state)case(current_state) STATE_INIT: begin STATE_INIT: begin next_state = STATE_ST1;next_state = STATE_ST1; Z = 2b01; Z = 2b01; end end STATE_ST1: begin STATE_ST1: begin if(A) beginif(A) begin next_state = STATE_ST2; next_state = STATE_ST2; Z = 2b11; Z = 2b11; end el

55、se begin end else begin next_state = STATE_FINISH; next_state = STATE_FINISH; Z = 2b10; Z = 2b10; end end end end STATE_ST2: begin STATE_ST2: begin next_state = STATE_FINISH;next_state = STATE_FINISH; Z = 2b10; Z = 2b10; end end STATE_FINISH: begin STATE_FINISH: begin / next_state = STATE_FINISH;/ n

56、ext_state = STATE_FINISH; Z = 2b01; Z = 2b01; finish = 1b1;finish B; R = R - B) D = D + 1;for(R=A; RB; R = R - B) D = D + 1;endendok = 1;ok = 1;endendendmoduleendmodule55算法验证算法验证v 上面给出了行为级的描述,上面给出了行为级的描述,可以用于验证算法的正确性可以用于验证算法的正确性v 可以编写可以编写testbench文件对算文件对算法的正确性进行验证法的正确性进行验证v 更换更换A, B的值进行多次仿真,的值进行多次仿真

57、,尤其注意对特殊输入的测试尤其注意对特殊输入的测试(例如除数为(例如除数为0,被除数小于,被除数小于或等于除数等)或等于除数等)v 可以编写更复杂的测试,产可以编写更复杂的测试,产生生n组随机数作为激励,并自组随机数作为激励,并自动把输出响应与正确结果相动把输出响应与正确结果相比较比较/除法器设计的测试文件除法器设计的测试文件timescale 1ns/100pstimescale 1ns/100psmodule tb_div;module tb_div;reg start;reg start;reg 31:0 A, B;reg 31:0 A, B;wire 31:0 D, R;wire 31

58、:0 D, R;wire err, ok;wire err, ok;div UDIV(start, A, B, D, R, err, ok);div UDIV(start, A, B, D, R, err, ok);initial $monitor(“at %t A=%x, B=%x, start=%d, initial $monitor(“at %t A=%x, B=%x, start=%d, D=%d, R=%d, err=%d, ok=%d”, A, B, start, D=%d, R=%d, err=%d, ok=%d”, A, B, start, D, R, err, ok);D,

59、R, err, ok);initialinitialbeginbeginstart = 0;start = 0;A = 32h12345678;A = 32h12345678;B = 32habcd;B = 32habcd;#20#20start = 1;start = 1;#50#50$stop$stopendendendmoduleendmodule56结构设计结构设计v 考虑设计的可综合性,考虑设计的可综合性,可用计数器来代替可用计数器来代替for语句语句v 使用状态机控制运算使用状态机控制运算的开始、进行、和结的开始、进行、和结束束v 可以编写行为级模型可以编写行为级模型对结构进行再次

60、验证对结构进行再次验证STATE_INITSTATE_INITSTATE_RUNSTATE_RUNSTATE_FINISHSTATE_FINISHstart = 1start = 1start = 0start = 0B=0 or count=32B=0 or count=32reset = 0reset = 0count!=32count!=32状态转移图状态转移图57结构设计(结构设计(cont.cont.)v 把设计根据控制部分和运把设计根据控制部分和运算部分划分控制逻辑和数算部分划分控制逻辑和数据通路据通路v 分析和优化关键路径分析和优化关键路径v 分别设计各个模块,对于分别设计各个模块,对于一些基本运算(一些基本运算(+, -, 计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论