欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Verilog-HDL数字设计教程--第3章-Verilog-HDL常用建模方法新课件.ppt

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

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

    Verilog-HDL数字设计教程--第3章-Verilog-HDL常用建模方法新课件.ppt

    第3 章 Verilog HDL 常用建模方法 3.1 建模方法引例 3.2 结构化形式建模 3.3 数据流级建模 3.4 行为级建模 3.5 小结5/29/2023 13.1 建模方法引例【例3-1】设计实现一个3 人判决电路,当3 个人中有2 人或者超过2 个人同意,则表决结果为通过;否则表决结果不通过。5/29/2023 23.1 建模方法引例 第一步:理解题意 设a,b,c分别代表3 个人,同意用1 表示,不同意用0表示,y代表表决结果,1表示通过,0 表示不通过。根据题意有,当a,b,c三个中有2 个为1,或者3个均为1 时,y为1,否则y为0。第二步:根据题意,列真值表a b c y0 0 0 00 0 1 00 1 0 00 1 1 11 0 0 01 0 1 11 1 0 11 1 1 15/29/2023 33.1 建模方法引例n 第三步:根据真值表,列输出方程:y=abc+abc+abc+abcn 第四步:化简方程,可以采用代数化简法或者卡诺图化简法 化简后的方程为:y=ab+bc+ca000101 1 1 10000 1 01 1 1abcy5/29/2023 43.1 建模方法引例n 第五步:根据化简后的方程画出电路图5/29/2023 53.1 建模方法引例【例3-2】对应于步骤一的Verilog 建模module decision_1(a,b,c,y);input a,b,c;output reg y;always(a,b,c)if(a&b=1)|(b&c=1)|(c&a=1)|(a&b&c=1)y=1;else y=0;endmodule 5/29/2023 63.1 建模方法引例【例3-3】对应于步骤二的Verilog 建模module decision_2(a,b,c,y);input a,b,c;output reg y;always(a,b,c)case(a,b,c)3b000:y=0;3b001:y=0;3b010:y=0;3b011:y=1;3b100:y=0;3b101:y=1;3b110:y=1;3b111:y=1;endcaseendmodule5/29/2023 73.1 建模方法引例【例3-4】对应于步骤三的Verilog 建模module decision_3(a,b,c,y);input a,b,c;output y;assign y=(a&b&c)|(a&b&c)|(a&b&c)|(a&b&c);endmodule5/29/2023 83.1 建模方法引例【例3-5】对应于步骤四的Verilog 建模module decision_4(a,b,c,y);input a,b,c;output y;assign y=(a&b)|(b&c)|(c&a);endmodule5/29/2023 93.1 建模方法引例【例3-6】对应于步骤五的Verilog 建模module decision_5(a,b,c,y);input a,b,c;output y;/assign y=(a&b)+(b&c)+(c&a);/assign y=a&b+b&c;and(ab,a,b),(bc,b,c),(ca,c,a);or(y,ab,bc,ca);endmodule5/29/2023 103.1 建模方法引例图3-6 功能仿真波形5/29/2023 113.2 结构化形式建模 1.门级建模 2.用户自定义原语5/29/2023 12门级建模(1)与/或门类(2)缓冲/非门类5/29/2023 13门级建模【例3-7】利用双输入端的nand 门,编写自己与门(my_and)、或门(my_or)、非门(my_not)、异或门(my_xor)。module my_and(a,b,y);/用两个nand 门input a,b;output y;wire nandab;nand(nandab,a,b),(y,nandab,nandab);endmodulemodule my_or(a,b,y);/用三个nand 门input a,b;output y;wire nandaa,nandbb;nand(nandaa,a,a),(nandbb,b,b),(y,nandaa,nandbb);endmodulemodule my_not(a,y);/用一个nand 门input a;output y;nand(y,a,a);endmodulemodule my_xor(a,b,y);/用四个nand 门实现异或门input a,b;output y;wire andab,c,d;nand(andab,a,b),(c,andab,a),(d,andab,b),(y,c,d);endmodule5/29/2023 14用户自定义原语【例3-8】表示组合逻辑的UDP 举例:一位全加器/全加器进位实现部分primitive U_ADD_C(CO,A,B,CI);output CO;input A,B,CI;table/A B CI:CO 1 1?:1;1?1:1;?1 1:1;0 0?:0;0?0:0;?0 0:0;endtableendprimitive/全加器求和实现部分primitive U_ADD_S(S,A,B,CI);output S;input A,B,CI;table/A B CI:S 0 0 0:0;0 0 1:1;0 1 0:1;0 1 1:0;1 0 0:1;1 0 1:0;1 1 0:0;1 1 1:1;endtableendprimitive 5/29/2023 15用户自定义原语/调用上述两个UDP 的全加器模块module U_ADD(SUM,CO,a,b,ci);input a,b,ci;output SUM,CO;U_ADD_S U1(SUM,a,b,ci);U_ADD_C U2(CO,a,b,ci);endmodule5/29/2023 16用户自定义原语【例3-9】表示时序逻辑的UDP 举例:D 触发器primitive d_edge_ff(q,clk,data);output q;input clk,data;reg q;table/clk dat state next(01)0:?:0;(01)1:?:1;/时钟下降沿(?0)?:?:-;/时钟稳定时忽略data 变化?(?):?:-;endtableendprimitive5/29/2023 173.3 数据流级建模 1.连续赋值语句 2.运算符类型5/29/2023 18连续赋值语句【例3-10】使用数据流建模,实现一位半加器。module adder_half(ain,bin,sum,co);input ain,bin;output sum,co;assign co,sum=ain+bin;endmoduleinput outputain bin sum co0 0 0 00 1 1 01 0 1 01 1 0 15/29/2023 19运算符类型运算符类型运算符 执行的操作 操作数的个数运算符类型运算符 执行的操作 操作数的个数算术*乘 2关系 大于 2/除 2=大于等于 2+加 2=小于等于 2-减 2=等于 2逻辑!逻辑反 1!=不等于 2&逻辑与 2缩减&缩减与 1|逻辑或 2&缩减与非 1按位 按位求反 1|缩减或 1&按位与 2|缩减或非 1|按位或 2 缩减异或 1 按位异或 2 缩减同或 1 按位同或 2位拼接 拼接 任意移位 右移 2 条件?:条件 35/29/2023 20算术运算符【例3-11】算术运算符示例module arith(a,b,add,sub,mul,div,mod,pow);input7:0 a,b;output7:0 add,sub,mul,div,mod,pow;assign add=a+b,sub=a-b,mul=a*b,div=a/b,mod=a%b,pow=a*4;endmodule5/29/2023 21关系运算符关系运算符包括:大于()、小于(=)、小于等于(=)、等于(=)、不等于(!=)。5/29/2023 22逻辑运算符a b!a!b a&b a|b真 真 假 假 真 真真 假 假 真 假 真假 真 真 假 假 真假 假 真 真 假 假5/29/2023 23按位运算符按位与0 1按位或0 1按位取反结果0 0 0 0 0 1 0 11 0 1 1 1 1 1 0按位异或0 1按位同或0 10 0 1 0 1 01 1 0 1 0 15/29/2023 24缩减运算符 缩减运算符包括:缩减与(&)、缩减与非(&)、缩减或(|)、缩减或非(|)、缩减异或()、缩减同或(,)。缩减运算符是单目运算符,也有与、或、非运算。其与、或、非运算规则类似于位运算符的与、或、非运算规则,但其运算过程不同。5/29/2023 25条件运算符【例3-12】试用条件运算符来实现一个四选一多路选择器。module mux4to1(out,condition1,condition2,in1,in2,in3,in4);output out;input in1,in2,in3,in4;input condition1,condition2;assign out=(condition1)?(condition2?in1:in2):(condition2?in3:in4);endmodule 5/29/2023 26移位运算符【例3-13】采用移位运算符实现两个3 位数的乘法。module mul_3bit(a,b,mul);input 2:0 a,b;output5:0 mul;wire5:0 mul1,mul2,mul3;assign mul=mul3;assign mul1=b0?a:0;assign mul2=b1?(mul1+(a1):mul1;assign mul3=b2?(mul2+(a2):mul2;endmodule 5/29/2023 27位拼接运算符a,b3:0,w,3b101/等价于a,b3,b2,b1,b0,w,1b1,1b0,1b11,1/64 位,从右边数第0 位为1,第32 位为1,其余位均为04w/等价于w,w,w,wb,3a,b/等价于b,a,b,a,b,a,b5/29/2023 28优先级别5/29/2023 293.4 行为级建模 1.结构化过程语句always 2.过程赋值语句 3.块语句 4.条件语句 5.多路分支语句 6.循环语句 7.任务和函数语句5/29/2023 30结构化过程语句always【例3-15】使用always 语句描述D 触发器module mydff(q,clk,d);input clk,d;output q;reg q;always(posedge clk)q=d;endmodule5/29/2023 31过程赋值语句【例3-16】阻塞赋值方式描述的移位寄存器1module block1(Q0,Q1,Q2,D,clk);output Q0,Q1,Q2;input clk,D;reg Q0,Q1,Q2;always(posedge clk)begin/注意赋值语句的顺序Q2=Q1;Q1=Q0;Q0=D;endendmodule5/29/2023 32过程赋值语句【例3-17】阻塞赋值方式描述的移位寄存器2module block2(Q0,Q1,Q2,D,clk);output Q0,Q1,Q2;input clk,D;reg Q0,Q1,Q2;always(posedge clk)begin/该句与下句的顺序与例3-16 颠倒Q1=Q0;Q2=Q1;Q0=D;endendmodule5/29/2023 33过程赋值语句【例3-18】阻塞赋值方式描述的移位寄存器3module block3(Q0,Q1,Q2,D,clk);output Q0,Q1,Q2;input clk,D;reg Q0,Q1,Q2;always(posedge clk)beginQ0=D;/3 条赋值语句的顺序与例3-16 完全颠倒Q1=Q0;Q2=Q1;endendmodule5/29/2023 34过程赋值语句【例3-19】非阻塞赋值方式描述的移位寄存器1module non_block1(Q0,Q1,Q2,D,clk);output Q0,Q1,Q2;input clk,D;reg Q0,Q1,Q2;always(posedge clk)beginQ1=Q0;Q2=Q1;Q0=D;endendmodule【例3-20】非阻塞赋值方式描述的移位寄存器2module non_block2(Q0,Q1,Q2,D,clk);output Q0,Q1,Q2;input clk,D;reg Q0,Q1,Q2;always(posedge clk)beginQ0=D;/3 条赋值语句的顺序与例3-19 完全颠倒Q2=Q1;Q1=Q0;endendmodule5/29/2023 35块语句【例3-21】完成以下两个功能:(1)使用异或运算符对D 完成缩位异或运算;(2)检测D 中1 的个数Verilog 实现代码如下:module named_block(D,xnor_D,CountOnes);input3:0 D;output reg xnor_D;output reg2:0 CountOnes;always(D)begin:block1xnor_D=0;CountOnes=0;begin:xor_blockinteger I;for(I=0;I 4;I=I+1)xnor_D=xnor_D DI;end/循环begin:Count_blockinteger J;for(J=0;J4;J=J+1)if(DJ)CountOnes=CountOnes+1;end endendmodule 5/29/2023 36条件语句【例3-22】使用always 语句描述具有同步复位 和同步置位功能的D 触发器module mydff(q,clk,set,clr,d);input clk,d,set,clr;output q;reg q;always(posedge clk)begin if(set)q=1;else if(!clr)q=0;else q=d;endendmodule5/29/2023 37多路分支语句【例3-23】使用case 语句实现四功能的算术逻辑单元(ALU)module alu_4fun(a,b,sel,out);input3:0 a,b;input1:0 sel;output reg4:0 out;always(a,b,sel)begincase(sel)2b00:out=a+b;2b01:out=a-b;2b10:out=ab;default:out=a%b;endcase endendmodule sel 信号 功能2b00 out=a+b2b01 out=a-b2b10 out=ab其他 out=a%b5/29/2023 38循环语句【例3-24】使用repeat 循环语句及加法和移位操作来实现一个参数化的多位乘法器。module mult_repeat(result,op_a,op_b);parameter size=4;input size:1 op_a,op_b;output 2*size:1 result;reg 2*size:1 shift_opa,result;reg size:1 shift_opb;always(op_a or op_b)begin:mult result=0;shift_opa=op_a;shift_opb=op_b;repeat(size)begin if(shift_opb1)result=result+shift_opa;shift_opa=shift_opa 1;/Shift right end endendmodule5/29/2023 39循环语句【例3-25】使用for 循环语句实现一个参数化的多位乘法器。module mult_for(result,op_a,op_b);parameter size=4;input size:1 op_a,op_b;output 2*size:1 result;reg 2*size:1 shift_opa,result;reg size:1 shift_opb;always(op_a or op_b)begin:mult/由于块中定义了局部变量i,此处必须给块命名 integer i=0;result=0;shift_opa=op_a;shift_opb=op_b;for(i=0;isize;i=i+1)begin if(shift_opb1)result=result+shift_opa;shift_opa=shift_opa 1;/Shift right end endendmodule5/29/2023 40循环语句【例3-26】使用for 循环语句实现一个参数化的多位乘法器的另一种算法。module mult_for2(result,op_a,op_b);parameter size=4;input size:1 op_a,op_b;output 2*size:1 result;reg 2*size:1 shift_opa,result;reg size:1 shift_opb;always(op_a or op_b)begin:mult integer j;result=0;for(j=1;j=size;j=j+1)if(op_bj)result=result+(op_a(j-1);endendmodule5/29/2023 41循环语句【例3-27】使用for 循环语句对变量中的1 的位进行计数的程序片断begin:count1sreg7:0 tempreg;count=0;for(tempreg=rega;tempreg;tempreg=tempreg1)if(tempreg0)count=count+1;end5/29/2023 42任务和函数语句【例3-28】用任务实现输入数据按位逆序后输出的功能Verilog 实现代码如下:module task_ex(clk,D,Q);input clk;input MAX_BITS:1 D;output reg MAX_BITS:1 Q;parameter MAX_BITS=8;task reverse_bits;input MAX_BITS:1 data;output MAX_BITS:1 result;integer K;for(K=0;KMAX_BITS;K=K+1)resultMAX_BITS-K=dataK+1;endtaskalways(posedge clk)reverse_bits(D,Q);endmodule5/29/2023 43任务和函数语句【例3-29】用函数实现输入数据位逆序后输出的功能Verilog 实现代码如下:module function_ex(clk,D,Q);input clk;input MAX_BITS:1 D;output reg MAX_BITS:1 Q;parameter MAX_BITS=8;functionMAX_BITS:1 reverse_bits;input MAX_BITS:1 data;integer K;for(K=0;KMAX_BITS;K=K+1)reverse_bitsMAX_BITS-K=dataK+1;endfunctionalways(posedge clk)Q=reverse_bits(D);endmodule5/29/2023 443.5 小结在本章,我们讨论了以下知识点:本章从一个典型数字电路实例入手来引入建模方法,介绍Verilog HDL的常用建模方法,并重点介绍门级建模、数据流级建模和行为级建模方法。门的基本类型包括与门(and)、或门(or)、与非门(nand)、或非门(nor)、异或门(xor)、同或门(xnor)、缓冲器(buf)和非门(not)等。每种门都有逻辑符号、真值表和对应的verilog 原语。这些原语的调用方法和模块的调用方法一样,但这些原语是verilog 语言预定义的(不需要自行编写)。门的任意一个输入发生变化以后,门的输出立即被重新计算。连续赋值语句是数据流建模的主要语法结构。连续赋值语句总是处于有效状态,即任一操作数的变化都会立即导致对表达式的重新计算。连续赋值语句的左侧必须是线网类型的变量或者拼接。任何逻辑功能都能够使用连续赋值语句来完成。5/29/2023 453.5 小结 运算符的类型包括算术、关系、逻辑、按位、缩减、条件、移位和位拼接运算符。单目、双目和三目运算符分别具有一个、两个和三个操作数,而拼接运算符可以具有任意多个操作数。由于运算符的优先级被忽视或混淆而造成错误的情况经常发生。为了避免源于运算符优先级的运算错误,在不确定运算符优先级的情况下,建议读者使用小括号将各个表达式分开。另外,使用括号也可以提高程序的可读性,明确表达各运算符间的优先关系。电路的门级描述、数据流描述、行为描述,抽象层次越来越高,但也越来越接近人的思维,方便设计者高效准确的进行系统设计。利用任务和函数可以把一个很大的程序模块分解成许多较小的任务和函数,这样便于理解和调试。Veirlog HDL 函数和任务在综合时被理解成具有独立运算功能的电路,每调用一次函数相当于改变这部分电路的输入以得到相应的计算结果。学会使用task 和function 语句可以简化程序的结构,使程序明白易懂,是编写较大型模块的基本功。5/29/2023 46 P79 T1、2、3、4、5、6、7、8、9、10、11作业5/29/2023 47在线教务辅导网:http:/更多课程配套课件资源请访问在线教务辅导网5/29/2023 485/29/2023 495/29/2023 505/29/2023 515/29/2023 525/29/2023 53馋死5/29/2023 545/29/2023 555/29/2023 565/29/2023 575/29/2023 585/29/2023 595/29/2023 605/29/2023 615/29/2023 625/29/2023 635/29/2023 645/29/2023 655/29/2023 66P P T 研 究 院P O W E R P O I N T A C A D E M Y5/29/2023 675/29/2023 685/29/2023 69

    注意事项

    本文(Verilog-HDL数字设计教程--第3章-Verilog-HDL常用建模方法新课件.ppt)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开