第4章-Verilog-HDL常用电路设计ppt课件_第1页
第4章-Verilog-HDL常用电路设计ppt课件_第2页
第4章-Verilog-HDL常用电路设计ppt课件_第3页
第4章-Verilog-HDL常用电路设计ppt课件_第4页
第4章-Verilog-HDL常用电路设计ppt课件_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 Verilog HDL常用电路设计,4.1 常用组合逻辑电路设计 4.2 常用时序逻辑电路设计 4.3 小结,4.1 常用组合逻辑电路设计,1 数据选择器 2 译码器 3 加法器 4 乘法器 5 比较器 6 ALU 7 三态总线,4.1 常用组合逻辑电路设计,数据选择器,例4-1】 参数型n位,mx1数据选择器 module multiplexer_N( X1,X2,X3,X4, sel,Y); parameter N=8; /该参数定义了一个(8位)的4选一多路选择器 inputN-1: 0 X1,X2,X3,X4; input1:0 sel; output reg N-1: 0 Y

2、; always (sel,X1,X2,X3,X4) case(sel) 2b00: Y = X1; 2b01: Y = X2; 2b10: Y = X3; 2b11: Y = X4; endcase endmodule,译码器,例4-2】 参数型log nxn译码器 module decode_N( sel, Y); parameter N=4; /该参数定义了一个4输出(4位)的译码器 input1:0 sel; /此参数为2位,通过计算log4=2得到,可得到4输出译码器 output reg N-1: 0 Y; always (sel) case(sel) 2b00: Y = 4b00

3、01; 2b01: Y = 4b0010; 2b10: Y = 4b0100; 2b11: Y = 4b1000; endcase endmodule,加法器,例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,乘法器,例4-4】 参数型N位乘法器 module mul_N( X, Y, mul); parameter N=8; input N-1: 0 X, Y

4、; output 2*N-1: 0 mul; assign mul = X * Y; endmodule,比较器,例4-5】 参数型N位比较器 module compare_N( X, Y, X_gt_Y, X_eq_Y, X_lt_Y); parameter N=8; /参与比较的数的位数为8 input 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;

5、X_lt_Y=0; end else begin X_gt_Y=0;X_eq_Y=0; X_lt_Y=1; end endmodule,ALU,例4-6】 参数型n位,m功能ALU module alu_N(X, Y, sel,result); parameter N=8; input2:0 sel; /3位可定义m=8功能 input N-1: 0 X, Y; output regN-1: 0 result; always (X, Y, sel) begin case(sel) 3b000: result=X+Y; /加法 3b001: result=X-Y; /减法 3b010: resu

6、lt=X1; /右移1位 3b100: result=X /直通 endcase end endmodule,三态总线,例4-7】三态门设计 module tri_s(enable,datain,dataout); parameter N=8; input enable; inputN-1:0 datain; output regN-1:0 dataout; always (enable,datain) if(enable=1) dataout=datain; else dataout=bz; endmodule,三态总线,例4-8】N位4通道的三态总线驱动器 module tri_bus(i

7、nput3,input2,input1,input0,enable,out); parameter N=8; inputN-1:0 input3,input2,input1,input0; input1:0 enable; output regN-1:0 out; always (enable,input3,input2,input1,input0) begin if(enable=2b00) out=input3; else out=bz; if(enable=2b01) out=input2; else out=bz; if(enable=2b10) out=input1; else ou

8、t=bz; if(enable=2b11) out=input0; else out=bz; end endmodule,三态总线,例4-9】N位4通道的三态总线驱动器(实现方法1) module tri_bus_2(input3,input2,input1,input0,enable,out); parameter N=8; inputN-1:0 input3,input2,input1,input0; input1:0 enable; outputN-1:0 out; assign out=(enable=2b00)? input3:bz, out=(enable=2b01)? input

9、2:bz, out=(enable=2b10)? input1:bz, out=(enable=2b11)? input0:bz; endmodule,三态总线,例4-10】N位4通道的三态总线驱动器(实现方法2) module tri_bus_3(input3,input2,input1,input0,enable,out); parameter N=8; inputN-1:0 input3,input2,input1,input0; input1:0 enable; output regN-1:0 out; always (enable,input3,input2,input1,input

10、0) begin if(enable=2b00) out=input3; else out=bz; end always (enable,input3,input2,input1,input0) begin if(enable=2b01) out=input2; else out=bz; end always (enable,input3,input2,input1,input0) begin if(enable=2b10) out=input1; else out=bz; end always (enable,input3,input2,input1,input0) begin if(ena

11、ble=2b11) out=input0; else out=bz; end endmodule,4.2 常用时序逻辑电路设计,1 D触发器和锁存器 2 寄存器 3 移位寄存器 4计数器 5分频器 6程序存储器 ROM 7数据存储器 RAM,4.2 常用时序逻辑电路设计,D触发器和锁存器,例4-12】 一位D触发器 实现方式一: module my_dff(clk, d, q); input clk; input d; output reg q; always (posedge clk) q = d; endmodule,寄存器,例4-13】 参数型n位寄存器 (1)一般寄存器 module

12、regx(clk, d, q); parameter N=8; input clk; inputN-1:0 d; output regN-1:0 q; always (posedge clk) q = d; endmodule,寄存器,2)同步复位,,同步置数,异步使能的寄存器 module register_N_0(D, Q, data,en,load,reset,clk); parameter N=8; input en,load,reset,clk; input N-1: 0 D,data; output regN-1: 0 Q; regN-1: 0 temp; always (pose

13、dge clk) /同步复位 begin if(reset) temp=0; else if(load) temp=data; else temp=D; end always (temp,en) /异步使能 begin if(en) Q=temp; else Q = bz; end endmodule,移位寄存器,例4-14】 参数型n位移位寄存器 /8位CPU中常用的移位寄存器模块 module shift_N(clk,Ci,mode,D,Q,Co); input clk,Ci; /时钟和移位输入 input2:0 mode; /移位模式控制字 inputN-1:0 D; /待加载移位的数据

14、 outputN-1:0 Q; /移位数据输出 output reg Co ; /移位输出 regN-1:0 temp; parameter N=8; /8位移位寄存器 always (posedge clk) begin case(mode) 3b000: begin temp = D; end / 加载待移数 3b001: begin temp0 = Ci ; tempN-1:1 = tempN-2:0; Co=tempN-1; /带进位循环左移 end 3b010: begin temp0 = tempN-1; tempN-1:1 = tempN-2:0; / 自循环左移 end 3b0

15、11: begin tempN-1 = temp0; tempN-2:0 = tempN-1:1; / 自循环右移 end 3b100: begin tempN-1 = Ci ; tempN-2:0 = tempN-1:1; Co=temp0; /带进位循环右移 end default: temp = temp ; / 保持 endcase end assign Q = temp; /移位后输出 endmodule,计数器,例4-15】 参数型n位计数器:带有异步复位和同步时钟使能 module cnt_N(clk,rst,en,Q,cout); input clk,rst,en; outpu

16、t regN-1:0 Q; output cout; parameter N=4; always (posedge rst, posedge clk) begin if(rst) /计数器异步复位 Q = 0; /为了能生成诸如触发器一类的时序逻辑,建议使用非阻塞赋值 else if(en) /计数器同步使能 Q = Q + 1; end assign cout= (Q=0)? 1b1:1b0; /计数器满溢出后cout输出1 endmodule,计数器,例4-16】十进制加法计数器:带有异步复位和同步时钟使能功能 module cnt10(clk,rst,en,Q,cout); input

17、clk,rst,en; output regN-1:0 Q; output cout; parameter N=4; always (posedge rst, posedge clk) begin if(rst) /计数器异步复位 Q = 0; /为了能生成诸如触发器一类的时序逻辑,建议使用非阻塞赋值 else if(en) /计数器同步使能 if(Q=9) Q = 0; else Q = Q + 1; end assign cout= (Q=0)? 1b1:1b0; /计数器满溢出后cout输出1 endmodule,分频器,例4-17】 参数型2n分频,占空比为50% module div

18、f_2powN(rst,clk,en,clk_N); input rst,clk,en; output clk_N; parameter N=2; regN-1:0 count; always (posedge clk) begin if(rst) count=0; else if(en) count=count+1; end assign clk_N=countN-1; endmodule,分频器,例4-18】 参数型奇数分频,要求占空比为50% module divf_oddn(clk,clk_N); input clk; output clk_N; parameter N=3; inte

19、ger p,q; reg clk_p,clk_q; always (posedge clk) /N分频设计例,体会其算法(占空比50%) begin if(p=N-1) begin p=0; clk_p=clk_p; end else p=p+1; end always (negedge clk) begin if(q=N-1) q=0; else q=q+1; if(p=(N-1)/2) clk_q=clk_q; end assign clk_N=clk_pclk_q; endmodule,分频器,例4-19】 参数型偶数分频,要求占空比为50% module divf_even(clk,c

20、lk_N); input clk; output reg clk_N; parameter N=6; integer p; always (posedge clk) begin if(p=N/2-1) begin p=0; clk_N=clk_N; end else p=p+1; end endmodule,分频器,例4-20】 可设置参数的任意分频器:占空比可变 module divf_parameter(rst,clk,en,clkout); input rst,clk,en; output clkout; integer temp; /最大值为2的32次方 parameter N=7,M

21、=3; /N为分频系数,M/N为占空比 always (posedge clk) begin if(rst) temp=0; else if(en) if(temp=N-1) temp=0; else temp=temp+1; end assign clkout=(tempM)? 1 : 0; endmodule,程序存储器 ROM,例4-21】 参数型ROM设计 module rom_nxm(rom_data,rom_addr,clk,rd,load); parameter M=8,N=4; /4根地址线,8位数据 input clk,rd; /rd读使能信号 input load; /用于

22、初始化ROM值的控制信号 inputN-1:0 rom_addr; output regM-1:0 rom_data; regM-1:0 memory0:2*N; /4根地址线,8位数据的存储器 always (posedge load) begin: init /该always块用于初始化ROM值 integer i; for(i=0;i(2*N);i=i+1) memoryi = i+1; end always (posedge clk) begin: read /该always块用于读取ROM值 if(rd) rom_data=memoryrom_addr; end endmodule,数据存储器 RAM,例4-22】 参数型RAM设计 module ram_nxm(rd,wr,cs,clk,addr,datain,dataout); parameter M=8,N=5; /5根地址

温馨提示

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

评论

0/150

提交评论