第7章可综合模型的设计_第1页
第7章可综合模型的设计_第2页
第7章可综合模型的设计_第3页
第7章可综合模型的设计_第4页
第7章可综合模型的设计_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

1、第7章 可综合模型的设计Verilog HDL数字系统设计及仿真Verilog HDL数字系统设计及仿真数字系统设计及仿真2本章内容本章内容 逻辑综合过程逻辑综合过程延迟延迟可综合语法可综合语法Verilog HDL数字系统设计及仿真数字系统设计及仿真3逻辑综合过程逻辑综合过程module JK_FF(Q,Qn,J,K,CLK);input J,K;input CLK;output Q,Qn;wire G3_n,G4_n,G5_n,G6_n,G7_n,G8_n;nand G7(G7_n,Qn,J,CLK);nand G8(G8_n,CLK,K,Q);nand G5(G5_n,G8_n,G6_n

2、);nand G6(G6_n,G5_n,G8_n);nand G3(G3_n,G5_n,CLK_n);nand G4(G4_n,CLK_n,G6_n);nand G1(Q,G3_n,Qn);nand G2(Qn,Q,G4_n);not G9(CLK_n,CLK);endmodulemodule CNAND (xxxxxx); module CNOT (xxxxx);CNAND C1(G7_n,Qn,J,CLK); CNAND C2 (G8_n,CLK,K,Q);CNAND C3 (G5_n,G8_n,G6_n);CNAND C4 (G6_n,G5_n,G8_n);CNAND C5 (G3_n,

3、G5_n,CLK_n);CNAND C6 (G4_n,CLK_n,G6_n);CNAND C7 (Q,G3_n,Qn);CNAND C8 (Qn,Q,G4_n);CNOT C9 (CLK_n,CLK);Verilog HDL数字系统设计及仿真数字系统设计及仿真4把现有的把现有的Verilog HDL代码根据现有的代码根据现有的工艺库转化为门级网表的过程工艺库转化为门级网表的过程 Verilog HDL由设计者编写由设计者编写工艺库由公司提供工艺库由公司提供门级网表交下一级处理门级网表交下一级处理Verilog HDL数字系统设计及仿真数字系统设计及仿真5延迟延迟 实际电路工作是要有延迟时间的,

4、不实际电路工作是要有延迟时间的,不管是电流的传输还是高低电平的翻转管是电流的传输还是高低电平的翻转都是需要时间的。都是需要时间的。当代码功能仿真通过之后,需要进行当代码功能仿真通过之后,需要进行综合,这时生成的门级网表就具有一综合,这时生成的门级网表就具有一定的电路意义了,此时可以加入时间定的电路意义了,此时可以加入时间延迟使门级网表与实际电路更加相似。延迟使门级网表与实际电路更加相似。 Verilog HDL数字系统设计及仿真数字系统设计及仿真6上升延迟、下降延迟和关断延迟上升延迟、下降延迟和关断延迟三种延迟都是相对于输入端而言的三种延迟都是相对于输入端而言的上升延迟指从输入端产生驱动信号到

5、上升延迟指从输入端产生驱动信号到输出端出现从输出端出现从0、x、z变化为变化为1的过程的过程下降延迟指从输入端产生驱动信号到下降延迟指从输入端产生驱动信号到输出端出现从输出端出现从1、x、z变化为变化为0的过程的过程关断延迟指从输入端产生驱动信号到关断延迟指从输入端产生驱动信号到输出端出现从输出端出现从0、1、x变化为变化为z的过程的过程Verilog HDL数字系统设计及仿真数字系统设计及仿真7可以定义一个、两个或三个,如下:可以定义一个、两个或三个,如下: nand #4 n2(Out,In1,In2); and # (3,5) a1(Dout,Din1,Din2); bufif0 # (

6、2,5,6) a2(Dout,Din1,Din2); Verilog HDL数字系统设计及仿真数字系统设计及仿真8由于每个电子器件的延迟都不尽相同,由于每个电子器件的延迟都不尽相同,为了更精确的模拟实际情况,增添最为了更精确的模拟实际情况,增添最小延迟、典型延迟和最大延迟小延迟、典型延迟和最大延迟 以冒号隔开以冒号隔开 notif0 #(1:2:3) a1(out,in1,in2); notif0 #(1:2:3,4:5:6) a2(out,in1,in2); notif0 #(1:2:3,4:5:6,7:8:9) a3(out,in1,in2);Verilog HDL数字系统设计及仿真数字系

7、统设计及仿真9数据流建模中同样可以使用延迟时间数据流建模中同样可以使用延迟时间 第一种,定义在线上第一种,定义在线上 wire #10 a; assign a=b;第二种,定义在第二种,定义在assign语句中语句中 wire a; assign #10 a=b;Verilog HDL数字系统设计及仿真数字系统设计及仿真10门级建模和数据流建模使用的延迟被门级建模和数据流建模使用的延迟被称为惯性延迟称为惯性延迟 and # (3,5) b1(Dout,Din1,Din2); Verilog HDL数字系统设计及仿真数字系统设计及仿真11惯性延迟主要模拟的是元器件输入端惯性延迟主要模拟的是元器件

8、输入端和输出端之间的变化情况和输出端之间的变化情况传输延迟主要模拟的是连线上左侧输传输延迟主要模拟的是连线上左侧输入和右侧输出之间的变化情况。入和右侧输出之间的变化情况。 reg b; always (b) a= #10 bVerilog HDL数字系统设计及仿真数字系统设计及仿真12各种延迟比较各种延迟比较reg out1n,out2n; /非阻塞赋值输出非阻塞赋值输出reg out1b,out2b; /阻塞赋值输出阻塞赋值输出wire out3;wire #20 out4; /惯性延迟惯性延迟always (WaveA ) out1n= # 20 WaveA; /非阻塞输出非阻塞输出1al

9、ways (WaveA ) #20 out2nOUT)=10; (B=OUT)=10; (C=OUT)=9; (D=OUT)=9;endspecifyendmoduleVerilog HDL数字系统设计及仿真数字系统设计及仿真17specify块块 (指定输入端指定输入端 = 指定输出端指定输出端) = 延迟时间延迟时间; specify (A=OUT)=10; (B=OUT)=10; (C=OUT)=9; (D=OUT)=9;endspecifyVerilog HDL数字系统设计及仿真数字系统设计及仿真18注意宽度注意宽度reg 3:0 A,OUT;specify (A0=OUT0)=10;

10、 (A1=OUT1)=10; (A2=OUT2)=10; (A3=OUT3)=10;endspecifyreg 3:0 A,OUT;specify (A=OUT)=10;endspecifyreg 3:0 A;reg 4:0 OUT;specify (A=OUT)=10;endspecifyVerilog HDL数字系统设计及仿真数字系统设计及仿真19全连接形式全连接形式 (指定输入端指定输入端 * 指定输出端指定输出端) = 延迟时间延迟时间; reg 1:0 A,OUT;specify (A*OUT)=10;endspecifyreg 1:0 A,OUT;specify (A0=OUT0)

11、=10; (A1=OUT1)=10; (A0=OUT1)=10; (A1=OUT0)=10;endspecifyVerilog HDL数字系统设计及仿真数字系统设计及仿真20支持支持if判断判断specify if(A) (A=OUT)=10; /A为为1时,延迟为时,延迟为10 if(!A) (A=OUT)=9; /A为为0时,延迟为时,延迟为9 if(B,C=2b11) (B=OUT)=10; if(B,C!=2b11) (B=OUT)=8; if (C|D) (C,D*OUT)=9; if (!(C|D) (C,D*OUT)=8;endspecify Verilog HDL数字系统设计及

12、仿真数字系统设计及仿真21也可以定义上升、下降、关断延迟也可以定义上升、下降、关断延迟 /定义定义1个时间,所有延迟都是相同的个时间,所有延迟都是相同的 (A=OUT)=10; /定义定义2个时间,分别对应上升和下降延迟个时间,分别对应上升和下降延迟 (A=OUT)=(10,12); /定义定义3个时间,分别对应上升、下降和关断延迟个时间,分别对应上升、下降和关断延迟 (A=OUT)=(10,12,13); /定义定义6个时间,个时间, /按顺序定义按顺序定义0-1, 1-0, 0-z, z-1, 1-z, z-0六个延迟六个延迟 (A=OUT)=(10,12,13,10,13,12); /定

13、义定义12个时间,按顺序定义了个时间,按顺序定义了0-1, 1-0, 0-z, z-1, 1-z, z-0 /0-x, x-1, 1-x, x-0, x-z, z-x共共12个延迟个延迟 (A=OUT)=(10,12,13,10,13,12,8,9,8,12,12,9);Verilog HDL数字系统设计及仿真数字系统设计及仿真22支持参数支持参数specify specparam falltime=8,risetime=10; (A=OUT)=(risetime,falltime); /上升时间上升时间8,下降时间,下降时间10endspecifyVerilog HDL数字系统设计及仿真数字

14、系统设计及仿真23再谈阻塞赋值与非阻塞赋值再谈阻塞赋值与非阻塞赋值 观察此例观察此例module n1 (y1, y2, clock, reset); output y1, y2; input clock, reset; reg y1, y2; always (posedge clock or posedge reset)if (reset) y1 = 0; else y1 = y2; /阻塞赋值阻塞赋值 always (posedge clock or posedge reset)if (reset) y2 = 1; else y2 = y1; /阻塞赋值阻塞赋值 endmoduleVeri

15、log HDL数字系统设计及仿真数字系统设计及仿真24仿真结果仿真结果Verilog HDL数字系统设计及仿真数字系统设计及仿真25改为非阻塞改为非阻塞module n2 (y1, y2, clock, reset); output y1, y2; input clock, reset; reg y1, y2; always (posedge clock or posedge reset)if (reset) y1 = 0; else y1 = y2; /非阻塞赋值非阻塞赋值 always (posedge clock or posedge reset)if (reset) y2 = 1; e

16、lse y2 = y1; /非阻塞赋值非阻塞赋值/ endmoduleVerilog HDL数字系统设计及仿真数字系统设计及仿真26仿真结果仿真结果Verilog HDL数字系统设计及仿真数字系统设计及仿真27注意阻塞完成时间注意阻塞完成时间always (WaveA ) begin out1b= # 20 WaveA; /阻塞输出阻塞输出1endVerilog HDL数字系统设计及仿真数字系统设计及仿真28建议原则建议原则组合电路用阻塞赋值组合电路用阻塞赋值时序电路用非阻塞赋值时序电路用非阻塞赋值混合电路用阻塞,但一般可拆为组合混合电路用阻塞,但一般可拆为组合和时序两部分和时序两部分Veri

17、log HDL数字系统设计及仿真数字系统设计及仿真29两种赋值对比两种赋值对比module shift(q,q1,q2,q3,d,clock);output q,q1,q2,q3;input d,clock;reg q,q1,q2,q3;always (posedge clock)begin q=q3; q3=q2; q2=q1; q1=d;endendmodule改为阻塞赋值后改为阻塞赋值后Verilog HDL数字系统设计及仿真数字系统设计及仿真30比较代码比较代码module n3(out,a,b,c,d);output out;input a,b,c,d;reg out,t1,t2;a

18、lways (a,b,c,d)begin t1=a|b; t2=c|d; out=t1t2; endendmodulealways (a,b,c,d,t1,t2)begin t1=a|b; /a和和b的或的或 t2=c|d; /c或或d的或的或 out=t1t2; /t1和和t2的异或的异或endalways (a,b,c,d)begin t1=a|b; /a和和b的或的或 t2=c|d; /c或或d的或的或 out=t1t2; /t1和和t2的异或的异或endVerilog HDL数字系统设计及仿真数字系统设计及仿真31可综合语法可综合语法 module和和endmodule作为模块声明的关

19、键字,作为模块声明的关键字,必然是可以被综合的。必然是可以被综合的。输入输入input、输出、输出output和双向端口和双向端口inout的声的声明是可以综合的。明是可以综合的。变量类型变量类型reg、wire、integer都是可以被综合都是可以被综合的。有符号变量的支持不一致,使用时需要注意。的。有符号变量的支持不一致,使用时需要注意。参数参数parameter和宏定义和宏定义define可以被综合可以被综合所有的所有的Verilog HDL内建门都是可以使用的,内建门都是可以使用的,即第二章中介绍的内建门如即第二章中介绍的内建门如and、or之类都是可之类都是可以在可综合设计中使用的。

20、以在可综合设计中使用的。Verilog HDL数字系统设计及仿真数字系统设计及仿真32数据流级的数据流级的assign语句是可以综合的语句是可以综合的行为级中敏感列表支持电平和边沿变化,行为级中敏感列表支持电平和边沿变化,类似类似posedge、negedge是可综合的是可综合的always、function是可综合的,是可综合的,task中中若不含延迟也可以被综合。若不含延迟也可以被综合。顺序块顺序块beginend可以被综合。可以被综合。if和和case语句可以被综合。语句可以被综合。Verilog HDL数字系统设计及仿真数字系统设计及仿真33多重驱动问题多重驱动问题 在多个在多个alw

21、ays结构中对同一信号赋值结构中对同一信号赋值reg clock,reset;reg 1:0 out,a,s;always (posedge clock)if(reset) out=2b00; always (posedge clock)if(s=2b11) out=2b10;always (posedge clock)if(reset) out=2b00;else if(s=2b11) out=2b10;else Verilog HDL数字系统设计及仿真数字系统设计及仿真34敏感列表不完整敏感列表不完整 丢失变化条件丢失变化条件always (a)c=ab;always (a or b)c=

22、ab;Verilog HDL数字系统设计及仿真数字系统设计及仿真35缺少缺少else和和default容易出现锁存器容易出现锁存器reg 1:0 out;always (posedge clock)begin if(s=2b00) out=2b00; else if(s=2b11) out=2b11; else out=2b11;endreg 1:0 sel;always (sel,a,b) case(sel) 2b00:out=a+b; 2b01:out=a-b; 2b00:out=a+b; 2b00:out=a+b; default:out=0; endcaseVerilog HDL数字系

23、统设计及仿真数字系统设计及仿真36组合和时序混合设计组合和时序混合设计 分类不清所致分类不清所致reg x,y,z;always (x,y,z,posedge reset)if (reset) out=0;else out=xyz;reg x,y,z;always (posedge reset)if (reset)begin x=0; y=0; z=0;endelse assign out=xyz; Verilog HDL数字系统设计及仿真数字系统设计及仿真37逻辑简化逻辑简化 sum1=(a+b)+(c+d);sum2=a+b+c+d; Verilog HDL数字系统设计及仿真数字系统设计及

24、仿真38sum3=a*b+a*c;sum4=a*(b+c); Verilog HDL数字系统设计及仿真数字系统设计及仿真39流水线思想流水线思想 流水线的基本思想就是把一个整体过程分为比较流水线的基本思想就是把一个整体过程分为比较独立的几个部分,然后再这些部分之间添加寄存独立的几个部分,然后再这些部分之间添加寄存器,使其可以在时钟控制下工作器,使其可以在时钟控制下工作Verilog HDL数字系统设计及仿真数字系统设计及仿真40SR锁存器延迟模型锁存器延迟模型 建模建模module my_rs(reset,set,q,qbar);input reset,set;output q,qbar;no

25、r #(1) n1(q,reset,qbar);nor #(1) n2(qbar,set,q);endmoduleVerilog HDL数字系统设计及仿真数字系统设计及仿真41测试模块测试模块module tb_71;reg set,reset;wire q,qbar;initialbegin set=0;reset=1;#10 set=0;reset=0;#10 set=1;reset=0;#10 set=1;reset=1;endmy_rs rs1(reset,set,q,qbar);initial$monitor($time,set= %b,reset= %b,q= %b,qbar= %

26、b,set,reset,q,qbar);endmoduleVerilog HDL数字系统设计及仿真数字系统设计及仿真42超前进位加法器超前进位加法器 原理公式原理公式1111122211212101200()()()()+()iiiiiiiiiiiiiiiiiiiiiiiiiiiiiCOGP CIGP GPCIGPGPPGPCIGPGPP GPP PPGPP PP CIVerilog HDL数字系统设计及仿真数字系统设计及仿真43设计模块设计模块module add_ahead(sum,cout,a,b,cin);output7:0 sum;output cout;input7:0 a,b;i

27、nput cin;wire7:0 G,P;wire7:0 C,sum;assign G0=a0&b0;assign P0=a0|b0;assign C0=cin;assign sum0=a0b0C0;Verilog HDL数字系统设计及仿真数字系统设计及仿真44assign G1=a1&b1;assign P1=a1|b1;assign C1=G0|(P0&cin);assign sum1=a1b1C1;assign G2=a2&b2;assign P2=a2|b2;assign C2=G1|(P1&G0)|(P1&P0&cin);ass

28、ign sum2=a2b2C2;assign G3=a3&b3;assign P3=a3|b3;assign C3=G2|(P2&G1)|(P2&P1&G0) |(P2&P1&P0&cin);assign sum3=a3b3C3; Verilog HDL数字系统设计及仿真数字系统设计及仿真45测试模块测试模块integer seed1,seed2,seed3;initial begin seed1=1;seed2=2;seed3=3; endalways begin #10 a=($random(seed1)/8); b=($random

29、(seed2)/8); cin=($random(seed3)/2);endVerilog HDL数字系统设计及仿真数字系统设计及仿真46功能仿真功能仿真时序仿真时序仿真Verilog HDL数字系统设计及仿真数字系统设计及仿真47移位除法器模型移位除法器模型 顶层模块顶层模块 module div(clk, reset, start, A, B, D, R, ok, err); parameter n = 32; parameter m = 16; input clk, reset, start; input n-1:0 A, B; output n+m-1:0 D; output n-1:

30、0 R; output ok, err; wire invalid, carry, load, run; div_ctl UCTL(clk, reset, start, invalid, carry, load, run, err, ok); div_datapath UDATAPATH(clk, reset, A, B, load, run, invalid, carry, D, R); endmoduleVerilog HDL数字系统设计及仿真数字系统设计及仿真48控制模块控制模块module div_ctl(clk, reset, start, invalid, carry, load,

31、 run, err, ok); parameter n = 32; parameter m = 16; parameter STATE_INIT = 3b001; parameter STATE_RUN = 3b010; parameter STATE_FINISH = 3b100; input clk, reset, start, invalid, carry; output load, run, err, ok; reg 2:0 current_state, next_state; reg 5:0 cnt; reg load, run, err, ok;Verilog HDL数字系统设计及

32、仿真数字系统设计及仿真49always (posedge clk or negedge reset) begin if(!reset) begin current_state = STATE_INIT; cnt = 0; end else begin current_state = next_state; if(run) cnt = cnt + 1b1; end end always (posedge clk or negedge reset) begin if(!reset) begin err = 0; end else if(next_state=STATE_RUN) begin if(

33、invalid) err = 1; end endVerilog HDL数字系统设计及仿真数字系统设计及仿真50always (current_state or start or invalid or carry or cnt) begin load = 1b0; ok = 1b0; run = 1b0; case(current_state) STATE_INIT: begin if(start) next_state = STATE_RUN; else next_state = STATE_INIT; load = 1; endVerilog HDL数字系统设计及仿真数字系统设计及仿真51 STATE_RUN : begin run = 1; if(invalid) begin next_state = STATE_FINISH; end else if(cnt=(n+m-1) begin next_state = STATE_FINISH; end else begin next_state = STATE_RUN; end end STATE_FINISH : begin ok = 1; next_state = STATE_FINISH;

温馨提示

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

评论

0/150

提交评论