VerilogHDL数字设计教程(贺敬凯)剖析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.1 常用组合逻辑电路设计  下面使用Verilog HDL分别对上述组合元件及常用的组合逻辑电路进行建模。   1. 数据选择器   例4-1实现了一个n位,m?×?1的数据选择器。   【例4-1】 参数型n位,m?×?1数据选择器。     module multiplexer_N( X1,X2,X3,X4, sel,Y);     parameter N=8; //该参数定义了一个8位的4选1多路选择器     input[N-1: 0] X1,X2,X3,X4; input[1:0] sel; output reg [N-1: 0] Y; always @(sel,X1,X2,X3,X4) case(sel) 2b00: Y = X1; 2b01: Y = X2; 2b10: Y = X3; 2b11: Y = X4; endcase endmodule   程序说明:   (1) 程序中定义了4个输入X1、X2、X3、X4,一个输出Y,使用控制信号sel选择4个输入中的1个赋给Y。   (2) 程序中使用parameter定义了一个参数常量N,通过修改参数可以很容易地改变输入、输出的位数。 2. 译码器 例4-2实现了一个log2 n?×?n的译码器。 【例4-2】 参数型log2 n?×?n译码器。   module decode_N( sel, Y);   parameter N=4; //该参数定义了一个4输出(4位)译码器   input[1:0] sel; //此参数为2位,通过计算log24=2可得到4输出译码器   output reg [N-1: 0] Y;   always @(sel)   case(sel) 2b00: Y = 4b0001; 2b01: Y = 4b0010; 2b10: Y = 4b0100; 2b11: Y = 4b1000; endcase endmodule   程序说明:   (1) 程序中定义了一个输入sel,一个输出Y,使用控制信号sel来确定Y的输出。   (2) 由于本程序涉及求以2为底的对数计算,因此若修改参数N,sel的位数就要手工做相应调整,这样才可实现任意位数的译码器。 3. 加法器 例4-3实现了N位加法器。 【例4-3】 参数型N位加法器。   module add_N( X, Y, sum, co);   parameter N=8;   input [N-1: 0] X, Y;   output [N-1: 0] sum;   output co;   assign { co, sum } = X + Y;   endmodule   程序说明:   (1) 程序中,X和Y分别为加数和被加数,sum和co分别为本位和及进位。   (2) 本例使用数据流建模实现,在综合时会自动映射为Quartus Ⅱ自带的加法器宏功能模块。 4. 乘法器 例4-4实现了N位乘法器。 【例4-4】 参数型N位乘法器。   module mul_N( X, Y, mul);   parameter N=8;   input [N-1: 0] X, Y;   output [2*N-1: 0] mul;   assign mul = X * Y;   endmodule   程序说明:   (1) 程序中,X和Y分别为乘数和被乘数,mul为两者的积。   (2) 本例使用数据流建模实现,在综合时,会自动映射为Quartus Ⅱ自带的乘法器宏功能模块。   5. 比较器   例4-5实现了N位比较器。   【例4-5】 参数型N位比较器。    module compare_N( X, Y, X_gt_Y, X_eq_Y, X_lt_Y);    parameter N=8; //参与比较的数的位数为8    nput [N-1: 0] X, Y;    output reg X_gt_Y, X_eq_Y, X_lt_Y;    always @(X,Y)    if(XY) begin X_gt_Y=1;X_eq_Y=0; X_lt_Y=0; end else if(X==Y) begin X_gt_Y=0;X_eq_Y=1; X_lt_Y=0; end else begin X_gt_Y=0;X_eq_Y=0; X_lt_Y=1; end endmodule   程序说明:   (1) 比较器实现的功能见表4-1。 6. ?ALU 例4-6实现了一个n位、m功能的ALU。 【例4-6】 参数型n位、m功能ALU。   module alu_N(X,

文档评论(0)

LOVE爱 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5341224344000002

1亿VIP精品文档

相关文档