Verilog硬件描述语言(7)设计实例

上传人:豆浆 文档编号:51017368 上传时间:2018-08-12 格式:PPT 页数:44 大小:193.50KB
返回 下载 相关 举报
Verilog硬件描述语言(7)设计实例_第1页
第1页 / 共44页
Verilog硬件描述语言(7)设计实例_第2页
第2页 / 共44页
Verilog硬件描述语言(7)设计实例_第3页
第3页 / 共44页
Verilog硬件描述语言(7)设计实例_第4页
第4页 / 共44页
Verilog硬件描述语言(7)设计实例_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《Verilog硬件描述语言(7)设计实例》由会员分享,可在线阅读,更多相关《Verilog硬件描述语言(7)设计实例(44页珍藏版)》请在金锄头文库上搜索。

1、西安邮电学院计算机系Verilog HDL模块设计实例1.组合逻辑电路设计实例:例1 八位带进位端的加法器的设计实例(利 用简单的算法描述) module adder_8(cout,sum,a,b,cin); output cout; output 7:0 sum; input cin; input7:0 a,b; assign cout,sum=a+b+cin; endmodule例2指令译码电路的设计实例 (利用电平敏感的always块来设计组合逻辑) /操作码的宏定义 define plus 3d0 define minus 3d1 define band 3d2 define bor

2、3d3 define unegate 3d4module alu(out,opcode,a,b); output 7:0 out; input 2:0 opcode; input 7:0 a,b; reg 7:0 out; always (opcode or a or b) /用电平敏感的always块描述 /组合逻辑 begin case(opcode) /算术运算 plus: out=a+b;minus: out=a-b;/位运算band: out=abor: out=a|b;/单目运算unegate: out=a;default:out=8hx;endcaseendendmodule例3

3、.利用task和电平敏感的always块设 计比较后重组信号的组合逻辑. module sort4(ra,rb,rc,rd,a,b,c,d); parameter t=3; output t:0 ra, rb, rc, rd; input t:0 a, b, c, d; reg t:0 ra, rb, rc, rd; always (a or b or c or d)/用电平敏感的always块描述组合逻辑begin reg t:0 va, vb, vc, vd;va,vb,vc,vd=a,b,c,d;sort2(va,vc); sort2(vb,vd);sort2(va,vb); sort2

4、(vc,vd);sort2(vb,vc);ra,rb,rc,rd=va,vb,vc,vd; endtask sort2; inout t:0 x, y; reg t:0 tmp; if( x y ) begin tmp = x; x = y; y = tmp; end endtask endmodule例4. 比较器的设计实例(利用赋 值语句设计组合逻辑) module compare(equal,a,b); parameter size=1; output equal; input size-1:0 a, b; assign equal =(a=b)? 1 : 0; endmodule例5.

5、 3-8译码器设计实例(利用赋 值语句设计组合逻辑) module decoder(out,in); output 7:0 out; input 2:0 in; assign out = 1b1in;/* 把最低位的1左移 in(根据从in口输入的值)位,并 赋予out */ endmodule例6. 8-3编码器的设计实例 编码器设计方案之一: module encoder1(out,in); output 2:0 out; input 7:0 in; reg 2:0 out; always (in)begin: localinteger i;out = 0;/*returns the va

6、lue of the highest bit number turned on*/ for( i=0; i8; i=i+1 ) begin if( ini ) begin out = i; end end end endmodule编码器设计方案之二: module encoder2 ( none_on, out2, out1, out0, h, g, f, e, d, c, b, a); input h, g, f, e, d, c, b, a; output none_on, out2, out1, out0; wire 3:0 outvec; assign outvec= h? 4b01

7、11 : g? 4b0110 : f? 4b0101: e? 4b0100 : d? 4b0011 :c? 4b0010 : b? 4b0001: a? 4b0000 : 4b1000; assign none_on = outvec3; assign out2 = outvec2; assign out1 = outvec1; assign out0 = outvec0; endmodule编码器设计方案之三: module encoder3 (none_on, out2, out1, out0, h, g,f, e, d, c, b, a); input h, g, f, e, d, c,

8、 b, a; output out2, out1, out0; output none_on; reg 3:0 outvec; assign none_on,out2,out1,out0 = outvec; always ( a or b or c or d or e or f or g or h) beginif(h) outvec=4b0111;else if(g)outvec=4b0110;else if(f)outvec=4b0101;else if(e)outvec=4b0100;else if(d)outvec=4b0011;else if(c)outvec=4b0010;else

9、 if(b)outvec=4b0001;else if(a)outvec=4b0000;elseoutvec=4b1000; end endmodule例7. 多路器的设计实例。 使用连续赋值、case语句或if-else语句可以生成 多路器电路,如果条件语句(case或if-else )中分支条件是互斥的话,综合器能自动地生 成并行的多路器。 多路器设计方案之一: modul emux1(out, a, b, sel); output out; input a, b, sel; assign out = sel? a : b; endmodule多路器设计方案之二: module mux2(

10、 out, a, b, sel); output out; input a, b, sel; reg out; /用电平触发的always块来设计多路器的组合逻辑 always ( a or b or sel ) begin /*检查输入信号sel的值,如为1,输出out为a,如为0,输出out为 b.*/ case( sel )1b1: out = a;1b0: out = b;default: out = bx; endcase end endmodule多路器设计方案之三: module mux3( out, a, b, sel); output out; input a, b, sel

11、; reg out; always ( a or b or sel ) begin if( sel ) out = a; else out = b; end endmodule例8. 奇偶校验位生成器设计实例Module parity( even_numbits,odd_numbits, input_bus); output even_numbits, odd_numbits; input 7:0 input_bus; assign odd_numbits = input_bus; assign even_numbits = input_bus; endmodule例9. 输出驱动器设计实例

12、三态输出驱动器设计方案之一: module trist1( out, in, enable); output out; input in, enable; assign out = enable? in: bz; endmodule三态输出驱动器设计方案之二: module trist2( out, in, enable ); output out; input in, enable; /bufif1是一个Verilog门级原语(primitive) bufif1 mybuf1(out, in, enable); endmodule2. 时序逻辑电路设计实例 例1触发器设计实例 module

13、dff( q, data, clk); output q; input data, clk; reg q; always ( posedge clk )beginq = data;end endmodule例2. 电平敏感型锁存器设计实例 module latch3( q, data, clk); output q; input data, clk; reg q; always (clk or data) beginif(clk)q=data; end endmodule例3. 移位寄存器设计实例 module shifter( din, clk, clr, dout); input din,

14、 clk, clr; output 7:0 dout; reg 7:0 dout; always (posedge clk) beginif(clr) dout = 8b0; /清零 else begindout = dout1;/左移一位dout0 = din; end/把输入信号放入寄存器的最低位 end endmodule例4. 八位计数器设计实例之一 module counter1( out, data, load, clk); output 7:0 out; input 7:0 data; input load, clk; reg 7:0 out;always (posedge cl

15、k) beginif( load )out = data;elseout = out + 1; end /只有当out7:0的所有各位都为1 endmodule例5. 八位计数器设计实例之二 module counter2( out, cout, data, load, clk); output 7:0 out; output cout; input 7:0 data; input load, clk; reg 7:0 out; reg cout; reg 7:0 preout;/创建8位寄存器 always (posedge clk)beginout = preout;end /*计算计数器和进位的下一个状态, 注意:为提高性能不希望加载影响进位*/ always ( out or data or load ) begincout, preout = out + 1;if(load) preout = data; end endmodule存储建模目标 学会如何用Verilog对存储器建模。 学会如何用Verilog中对双向(即输入/输出)端口, (inout)建模。存储器建模必须注意以下两个方面的问题: 声明存储器容量的大小。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号