欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    Verilog设计验证及简单组合逻辑电路设计.ppt

    • 资源ID:6522827       资源大小:387.50KB        全文页数:50页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Verilog设计验证及简单组合逻辑电路设计.ppt

    第6讲 Verilog设计验证及简单组合逻辑电路设计,授课教师:邹兴平电邮地址:zou_,2023/11/8,2,一、verilog设计的仿真验证占据整个设计的6070%的工作量,需要很高的代码覆盖率,并不比设计可综合代码简单,2023/11/8,3,测试平台的组成,激励信号,需要验证的设计,激励信号和用于验证的结果数据,需要验证的设计,简单的测试平台,复杂的测试平台,2023/11/8,4,模块的测试,测试模块常见的形式:module t;reg;/被测模块输入/输出变量类型定义wire;/被测模块输入/输出变量类型定义initial begin;end/产生测试信号always#delay begin;end/产生测试信号Testedmd m(.in1(ina),.in2(inb),.out1(outa),.out2(outb);/被测模块的实例引用initial begin.;.;.end/记录输出和响应endmodule,2023/11/8,5,模块的测试,测试模块中常用的过程块:,always,所有的过程块都在0时刻同时启动;它们是并行的,在模块中不分前后。initial块 只执行一次。always块 只要符合触发条件可以循环执行。,2023/11/8,6,模块的测试,如何描述激励信号:module t;reg a,b,sel;wire out;/引用多路器实例 mux2_m(out,a,b,sel);/加入激励信号initial begin a=0;b=1;sel=0;#10 b=0;#10 b=1;sel=1;#10 a=1;#10$stop;end,2023/11/8,7,并行块,在测试块中常用到forkjoin块。用并行块能表示以同一个时间起点算起的多个事件的运行,并行地执行复杂的过程结构,如循环或任务。举例说明如下:module inline_tb;reg 7:0 data_bus;initial fork data_bus=8b00;#10 data_bus=8h45;#20 repeat(10)#10 data_bus=data_bus+1;#25 repeat(5)#20 data_bus=data_bus 1;#140 data_bua=8h0f;joinendmodule,/这两个repeat开始执行时间不同,但能同时运行。,2023/11/8,8,并行块,时间 data_bus0 8b0000_000010 8b0100_010130 8b0100_011040 8b0100_011145 8b1000_111050 8b1000_111160 8b1001_000065 8b0010_000070 8b0010_0001,时间 data_bus80 8b0010_001085 8b0100_010090 8b0100_0101 100 8b0010_0001105 8b0100_0110110 8b1000_1100120 8b1000_1110125 8b0001_1100140 8b0000_1111,上面模块的仿真输出如下:,2023/11/8,9,强制激励,在一个过程块中,可以用两种不同的方式对信号变量或表达式进行连续赋值。过程连续赋值往往是不可以综合的,通常用在测试模块中。两种方式都有各自配套的命令来停止赋值过程。两种不同方式均不允许赋值语句间的时间控制。assign和deassign 适用于对寄存器类型的信号(例如:RTL级上 的节点或测试模块中在多个地方被赋值的信号)进行赋值。initial begin#10 assign top.dut.fsml.state_reg=init_state;,2023/11/8,10,#20 deassign top.dut.fsml.state_reg;endforce 和 release 用于寄存器类型和网络连接类型(例如:门级扫描寄存器的输出)的强制赋值,强制改写其它地方的赋值。initial begin#10 force top.dut.counter.scan_reg.q=0;#20 release top.dut.counter.scan_reg.q;end 在以上两个例子中,在10到20 这个时间段内,网络或寄存器类型的信号被强制赋值,而别处对该变量的赋值均无效。force的赋值优先级高于assign。如果先使用assign,再使用force对同一信号赋值,则信号的值为force所赋 的值,,字符串,强制激励,2023/11/8,11,语法详细讲解强制激励,当执行release后,则信号的值为assign所赋 的值。如果用force对同一个信号赋了几次值,再执行release,则所有赋的值均不再存在。可以对信号的某(确定)位、某些(确定)位或拼接的信号,使用force和release赋值;但不能对信号的可变位使用force和release 来赋值。不能对寄存器类型的信号某位或某些位使用 assign 和deassign 来赋值。,强制激励,2023/11/8,12,虽然有时在设计中会包含时钟,但时钟通常用在测试模块中。下面三个例子分别说明如何在门级和行为级建立不同波形的时钟模型。例1 简单的对称方波时钟:,建立时钟,reg clk;always begin#period/2 clk=0;#period/2 clk=1;end,reg go;wire clk;nand#(period/2)ul(clk,clk,go);initial begin go=0;#(period/2)go=1;end,注:在有些仿真器中,如果设计所用的时钟是由与其相同抽象级别的时钟模型产生的,则仿真器的性能就能得到提高。,2023/11/8,13,例2简单的带延迟的对称方波时钟:,建立时钟,reg clk;initial begin clk=0;#(period)forever#(period/2)clk=!clk end,reg go;wire clk;nand#(period/2)ul(clk,clk,go);initial begin go=0;#(period)go=1;end,注:这两个时钟模型有些不同,行为描述的模型延迟期间一直是低电平,而门级描述的模型开始延迟有半个周期是不确定的。,2023/11/8,14,例3.带延迟、头一个脉冲不规则的、占空比不为1的时钟:,建立时钟,reg clk;initial begin#(period+1)clk=1;#(period/2-1)forever begin#(period/4)clk=0;#(3*period/4)clk=1;endend,reg go;wire clk;nand#(3*period/4,period/4)ul(clk,clk,go);initial begin#(period/4+1)go=0;#(5*period/4-1)go=1;end,注:这两个时钟模型也有些不同,行为描述的模型一开始就有确定的电平,而门级描述的模型有延迟,开始时电平是不确定的。,2023/11/8,15,语法详细讲解怎样使用任务,举例说明如何使用任务:module bus_ctrl_tb;reg 7:0 data;reg data_valid,data_rd;cpu ul(data_valid,data,data_rd);initial begin cpu_driver(8b0000_0000);cpu_driver(8b1010_1010);cpu_driver(8b0101_0101);end,怎样使用任务,2023/11/8,16,task cpu_driver;input 7:0 data_in;begin#30 data_valid=1;wait(data_rd=1);#20 data=data_in;wait(data_rd=0);#20 data=8hzz;#30 data_valid=0;end endtaskendmodule,怎样使用任务,2023/11/8,17,语法详细讲解怎样使用任务,在测试模块中使用任务可以提高程序代码的效率,可以用任务把多次重复的操作包装起来。,怎样使用任务,wait,wait,wait,wait,data1,data2,data3,data4,cpu_data,clk,data_valid,data_rd,read_cpu_state,2023/11/8,18,二、modelsim仿真软件使用简介,1.modelsim简介Mentor公司产品,业界最优秀的HDL语言仿真器唯一单核支持VHDLVerilog混合仿真的仿真器,是FPGA/ASIC设计的RTL门级电路仿真首选编译仿真速度快,编译与平台无关,便于保护IP核全面支持VHDLVerilog语言的IEEE标准,支持c/c功能调用和调试公司网站http:/,2023/11/8,19,2.基本仿真步骤,支持单个文件仿真和工程仿真建立modelsim库,版本不同有区别启动modelsim主窗口file/change Directory更改路径创建工作库,默认为work创建资源库,2023/11/8,20,编译源代码默认被编译到work库对verilog语言编译器支持增量编译模式,也就是上次编译后修改过的部分会被编译,其他保持不变,对大型设计来说可减少编译时间主窗口compile/compile注意优化选项的设置,2023/11/8,21,启动仿真器必须把激励源文件和设计的顶层文件放在同一个目录,并且都编译到WORK库中双击work库中的激励文件,在工作取产生一个sim标签和file标签,可以看到设计的层次,2023/11/8,22,执行仿真在主窗口选择view菜单,可以选择需要的窗口,一般选择object和wave在object中,右键选择add/wave/signal in region或signal in design在主窗口、波形窗口单击运行,默认运行100nsWave波形窗口中,在信号名称上面单击右键,选择radix可选显示数据的进制观察结果,完成仿真,2023/11/8,23,3.窗口功能简介,Main窗口Structure窗口 显示当前设计的层次,颜色不同Source窗口 主要用来显示和编辑源代码,提供了模板Signals窗口 用来选择需要查看的当前层次的信号,监控仿真时信号的变化,可手动强制改变信号的值,2023/11/8,24,Process窗口显示仿真中用到的所有进程每个进程都有ready、wait、和done三种不同的状态Ready表示这个进程将在当前的delta时间内被执行Wait表示在等待信号线的变化Done表示执行的是VHDL的等待语句,2023/11/8,25,Variables窗口变量窗口,显示与变量相关的信息Dataflow 跟踪设计中的物理连接,设计中的事件等方便查找意外输出的原因Wave窗口:最常用的窗口List窗口:显示仿真时间、当前值,wave的另一种显示方式,2023/11/8,26,Modelsim的调试功能,1.监视信号:2.使用断点调试,2023/11/8,27,三、常用的组合逻辑电路建模,组合逻辑电路通常使用三种风格来建模1.使用连续赋值语句,最自然的一种描述方式2.Always顺序语句块中,使用过程赋值语句来建模3.使用函数的联系赋值语句建模优点:函数只综合出组合逻辑,而不担心综合出时序电路同一模块中可多次调用,2023/11/8,28,1.双向端口,管脚复用,节约芯片的引脚,通常用作数据交换Module bidirection(ce_in,out_port,in_port);Input ce_in;Inout15:0 out_port,in_port;Assign out_port=ce_in?In_port:16hzzzz;Assign in_port=ce_in?16hzzzz:out_port;EndmoduleInport是芯片内部的线,可以看成一个变量,out_port是芯片的引脚,2023/11/8,29,2.多路选择器(复用器MUX),Always*/表示所有输入信号,verilog 2001标准BeginCase(sel)/sel input selection signal2b00:out=a;2b01:out=b;2b10:out=c;2b11:out=d;Default:out=0;Endcaseend,四选一的多路复用器,2023/11/8,30,3.多路解复用器(IMUX),Always*/表示所有输入信号,verilog 2001标准BeginCase(sel)/sel input selection signal2b00:a=indat;2b01:b=indat;2b10:c=indat;2b11:d=indat;Endcaseend,一对四的接复用,与MUX相反,2023/11/8,31,4.比较器,always*Begin If(a=b)begin Agb=0;asb=0;aeb=1;end elseif(ab)begin Agb=1;asb=0;aeb=0;end elseif(ab)begin Agb=0;asb=1;aeb=0;end,2023/11/8,32,Else Begin Agb=bx;asb=bx;aeb=bx;endend,2023/11/8,33,5.编码器,Always*BeginCase(din)8b0000_0001:dout=3b000;8b0000_0010:dout=3b001;8b0000_0100:dout=3b010;8b0000_1000:dout=3b011;8b0001_0000:dout=3b100;8b0010_0000:dout=3b101;8b0100_0000:dout=3b110;8b1000_0000:dout=3b111;Endcaseend,8线3线编码器,2023/11/8,34,Always(din)BeginIf(din7=1)dout=3b111;elseIf(din6=1)dout=3b110;elseIf(din5=1)dout=3b101;elseIf(din4=1)dout=3b100;elseIf(din3=1)dout=3b011;elseIf(din2=1)dout=3b010;elseIf(din1=1)dout=3b001;elseIf(din0=1)dout=3b000;else dout=3bx;end,8-3线优先级编码器,2023/11/8,35,6.译码器,Always*BeginCase(din)3b000:dout=8b0000_0001;3b001:dout=8h02;3b010:dout=8h04;3b011:dout=8h08;3b100:dout=8h10;3b101:dout=8h20;3b110:dout=8h40;3b111:dout=8h80;default:dout=8h00;Endcaseend,3-8译码器,2023/11/8,36,7、移位寄存器,Always(posedge clk or posedge rst)if(rst)reg_out=3b000;Else case(mod)2b00:reg_out=reg_out1:0,right_in;/左移 reg_out=reg_out2:1,left_in;/右移 reg_out=reg_out1:0,parallel_in;/并行入 endcase,通用移位寄存器,2023/11/8,37,参数化的桶行移位器,Module barrelshift(din,rotate_cnt,dout);Parameter WIDTH=6;Parameter CNT_SIZE=3;InputCNT_SIZE-1:0 rotate_cntlInputWIDTH-1:0 din;outputWIDTH-1:0 dout;Wire WIDTH-1:0 temp;Assign dout,temp=din,dinrotate_cnt;endmodule,实现循环左移,2023/11/8,38,说明,Assign dout,temp=din,dinrotate_cnt;等效:dout,temp=din(WIDTH-1)-rotate_cnt:0,din WIDTH-1:0,rotate_cnt1b0;,2023/11/8,39,行波进位加法器(串行加法器),2023/11/8,40,说明,迭代公式:进位Q(i+1)=和z(i)=(x(i)+y(i)+q(i)mod B对二进制来说:q(i+1)=x(i)z(i)=x(i)y(i)q(i)消耗的资源和时间N倍单个全加器的资源和延迟时间例程:ripple_carry_adder.v,1,如果x(i)+y(i)+q(i)B-1/B进制,0,其他,2023/11/8,41,仿真图,2023/11/8,42,进位链加法器,2023/11/8,43,说明,g(i)=z(i)=(x(i)+y(i)+q(i)mod BP(i)=Q(i+1)=,1,如果x(i)+y(iB-1/B进制,0,其他,1,如果x(i)+y(i)=B-1/B进制,0,其他,q(i),如果p(i)=1/B进制,g(i),其他,2023/11/8,44,源码见carry_chain_adder.v,2023/11/8,45,2023/11/8,46,流水线加法器,FPGA系统设计的三种思想 乒乓球设计、串并变换、流水线核心思想:面积速度互换:占用的资源与系统频率流水线的思路如果电路采用并行算法还达不到要求,一般要考虑流水线结构,2023/11/8,47,2023/11/8,48,流水线技术,是一种将每个操作分解为多步,并让各步操作重叠,从而实现快速并行处理的技术;电路仍是一步步执行,但可以在上一操作没有完成前,可以重新开始执行新操作的前一步,从而可加快程序的运行速度;也是面积换速度的一种体现,2023/11/8,49,几个指令可以并行执行提高了CPU的运行效率,类似CPU执行指令,2023/11/8,50,流水线加法器,普通加法器见adder8.v二级流水线加法器见adder8_2.v四级流水线加法器见adder8_4.v,

    注意事项

    本文(Verilog设计验证及简单组合逻辑电路设计.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开