




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、硬件描述语言范例硬件描述语言语言设计实例1、8-3 编码器module encode_verilog ( a ,b ); input 7:0 a ; /编码器输入 wire 7:0 a ;output 2:0 b ; /编码器输出 reg 2:0 b;always ( a )begincase ( a ) /编码器某一输入端口为高电平输出 相应的 3 位二进制数8b0000_00018b0000_00108b0000_01008b0000_10008b0001_00008b0010_00008b0100_00008b1000_0000b=3b000; /0 b=3b001; /1 b=3b01
2、0; /2 b=3b011; /3 b=3b100; /4 b=3b101; /5 b=3b110; /6 b=3b111; /7default : b= 3b000; /其他情况编码器输 出 3 b000endcaseendendmodule2、8-3 优先编码器module p_encode_verilog ( A ,I ,GS ,EO ,EI ); / 编码器以低为有效input 7:0 I ; / 编码器输入wire 7:0 I ;input EI ; /输入使能, EI=0 时,编码器正常工 作wire EI ;output 2:0 A ; /编码器输出reg 2:0 A ;outp
3、ut GS ; /优先编码器工作状态标志,编码器 的八个输入端有信号输入时, GS=0 reg GS ;output EO ; /输出使能,reg EO ;always ( I or EI )if ( EI ) / 使用 if、else if表明条件的优先级顺 序beginA = 3b111;GS = 1;EO = 1;endelse if ( I7 = 0 ) beginA = 3b000;GS = 0;EO = 1;endelse if ( I6 = 0 )beginA = 3b001;GS = 0;EO = 1;endelse if ( I5 = 0 )beginA = 3b010;GS
4、 = 0;EO = 1;endelse if ( I4 = 0 )beginA = 3b011;GS = 0;EO = 1;endelse if ( I3 = 0 ) beginA = 3b100;GS = 0;EO = 1;endelse if ( I2 = 0 ) beginA = 3b101;GS = 0;EO = 1;endelse if ( I1 = 0 ) beginA = 3b110;GS = 0;EO = 1;endelse if ( I0 = 0 )beginA = 3b111;GS = 0;EO = 1;end else if ( I = 8b11111111)beginA
5、 = 3b111;GS = 1;EO = 0;end endmodule 3、3-8 译码器 module decoder_verilog ( G1 ,Y ,G2 ,A ,G3 ); input G1 ; /使能输入,高有效 wire G1 ;input G2 ; /使能输入,低有效 wire G2 ;input 2:0 A ; /3 位译码器输入,为高有效 wire 2:0 A ;input G3 ; /使能输入 wire G3 ; / 使能输入,低有效output 7:0 Y ; /8 位译码器输出,为低有效 reg 7:0 Y ;reg s;always ( A ,G1, G2, G3)
6、begins = G2 | G3 ;if ( G1 = 0) /G1 为低有效Y = 8b1111_1111;else if ( s)Y = 8b1111_1111;elsecase ( A )3b000 : Y= 8b1111_1110;3b001 : Y= 8b1111_1101;3b010 : Y= 8b1111_1011;3b011 : Y= 8b1111_0111;3b100 : Y= 8b1110_1111;3b101 : Y= 8b1101_1111;3b110 : Y= 8b1011_1111;3b111 : Y= 8b0111_1111;endcaseendendmodule
7、4、数据选择器 module mux8_1_verilog ( Y ,A ,D0, D1,D2, D3, D4, D5, D6, D7 ,G ); input 2:0 A ; /地址输入端 wire 2:0 A ;input D0 ; / 数据输入端 input D1 ; / 数据输入端 input D2 ; / 数据输入端 input D3 ; / 数据输入端 input D4 ; / 数据输入端 input D5 ; / 数据输入端 input D6 ; / 数据输入端 input D7 ; / 数据输入端 input G ; / 使能端,当 G=1 时 Y=0 ,当 G=0 时 数据选择
8、器正常工作wire G ; output Y ; /数据输出端 reg Y ;always (G or A or D0 or D1 or D2 or D3 or D4 or D5 or D6 or D7 )beginif (G = 1) /使能端的优先级高Y B )Y B 时 Y 输出 3b001 else if ( A = B)Y = 3b010; /A = B 时 Y 输出 3b010 elseY = 3b100; /A B 时 Y 输出 3b100 endendmodule6、全加器 module sum_verilog ( A ,Co ,B ,S ,Ci ); input A ; /输
9、入加数 Awire A ;input B ; /输入加数 B wire B ;input Ci ; / 相邻低位的进位输入信号 wire Ci ;output Co ; /向相邻高位的进位输出信号 reg Co ;10output S ; /相加和数输出 reg S ;always ( A or B or Ci)beginif ( A= 0 & B = 0 & Ci = 0 ) beginS = 0;Co = 0;endelse if ( A= 1 & B = 0 & Ci = 0 ) beginS = 1;Co = 0;endelse if ( A= 0 & B = 1 & Ci = 0 )
10、 beginS = 1;Co = 0;endelse if ( A=1 & B = 1 & Ci = 0 ) beginS = 0;11Co = 1; endelse if ( A= 0 & B = 0 & Ci = 1 ) beginS = 1;Co = 0;endelse if ( A= 1 & B = 0 & Ci = 1 ) beginS = 0;Co = 1;endelse if ( A= 0 & B = 1 & Ci = 1 ) beginS = 0;Co = 1;endelsebeginS = 1;Co = 1;end12endendmodule7、D 触发器module Dfl
11、ipflop ( Q ,CLK ,RESET ,SET ,D ,Qn );input CLK ; /D 触发器输入时钟wire CLK ;input RESET ; /D 触发器清零输入wire RESET ;input SET ; /D 触发器预置数输入wire SET ;input D ; /D 触发器输入wire D ;output Q ; /D 触发器输出reg Q ;output Qn ;wire Qn ;assign Qn = Q ; /将 D 触发器输出取反always ( posedge CLK or negedge SET or negedge RESET )beginif
12、( !RESET) /RESET 下降沿将 D 触发器13输出清零Q = 0 ;else if ( ! SET) /SER 下降沿将 D 触发器 输出置 1Q = 1;else Q = D; /CLK 上升沿 D 触发器输出 等于输入 end endmodule8、寄存器 module reg8 ( clr ,clk ,DOUT ,D ); input clr ; /异步清零信号,高有效 wire clr ;input clk ; /时钟输入 wire clk ;input 7:0 D ; /寄存器数据输入 wire 7:0 D ;output 7:0 DOUT ; / 寄存器数据输出 reg
13、 7:0 DOUT ;always ( posedge clk or posedge clr) beginif ( clr = 1b1)DOUT = 0;14else DOUT = D ; end endmodule9、双向移位寄存器 module shiftdata ( left_right ,load ,clr ,clk , DIN ,DOUT ); input left_right ; / 左移右移控制信号 wire left_right ;input load ; /异步置数信号, 有效时将 DIN 输入 wire load ;input clr ; /异步清零信号,高有效 wire
14、clr ;input clk ; /时钟输入 wire clk ;input 3:0 DIN ; / 并行输入 wire 3:0 DIN ;output 3:0 DOUT ; /并行输出 wire 3:0 DOUT ; / DOUT 是一个 wire 型变 量,不能在 always 块中被赋值 reg 3:0 data_r; /所以定义一个寄存器型变量 data_r 作为中间变量 assign DOUT = data_r ;always ( posedge clk or posedge clr15or posedge load ) beginif ( clr = 1) /异步清零data_r
15、= 0;else if (load ) / 异步置数data_r = DIN;else beginif ( left_right) /left_right=1 ,信号左移 begindata_r = (data_r1); data_r0 = 0; /移出位补 0 endelse begin /left_right=0,信号右移 data_r 1); data_r3 = 0; /移出位补 0 endendend endmodule10、4 位二进制加减法计数器 module counter4 ( load ,clr ,c ,DOUT ,clk, up_down ,DIN);16input loa
16、d ; / 异步预置数 input clk; /输入时钟 wire load ;input clr ; /异步清零 wire clr ;input up_down ; /加减计数, up_dpwn=1 加计 数, up_down=0减计数wire up_down ; input 3:0 DIN ; / 预置数输入 wire 3:0 DIN ;output c ; /进位 /借位输出,可以用于计数器的级 联reg c ;output 3:0 DOUT ; / 计数输出 wire 3:0 DOUT ;reg 3:0 data_r; assign DOUT = data_r; always ( po
17、sedge clk or posedge clr or posedge load) beginif ( clr = 1)/异步清零data_r = 0;17else if ( load = 1)/异步预置data_r = DIN;else begin if ( up_down =1) /加/ 计数 beginif ( data_r = 4b1111) begindata_r = 4b0000;c = 1;endelse begindata_r = data_r +1;c = 0 ;endend else /减计数 begin if ( data_r = 4b0000) begin data_r
18、 = 4b1111; c = 1;endelse begindata_r = data_r -1;c = 0 ;18endendendendendmodule11、十进制加减法计数器module counter10 ( load ,clr ,c ,DOUT ,clk, up_down ,DIN ,seven_seg);input load ; /异步预置数input clk; /输入时钟 wire load ;input clr ; /异步清零wire clr ;input up_down ; /加减计数, up_dpwn=1 加计 数, up_down=0减计数wire up_down ;i
19、nput 3:0 DIN ; / 预置数输入wire 3:0 DIN ;output c ; /进位 /借位输出,可以用于计数器的级 联reg c ;output 3:0 DOUT ; / 计数输出19output 7:0 seven_seg; /7段数码管 wire 3:0 DOUT ;reg 3:0 data_r; assign DOUT = data_r; always ( posedge clk or posedge clr or posedge load) beginif ( clr = 1) /异步清零 data_r = 0;else if ( load = 1) /异步预置 da
20、ta_r = DIN;else if ( up_down =1 & data_r = 9) /加进位 begin c = 1;data_r = 4b0000; endelse if ( up_down =0 & data_r = 0) /减借位 begin c = 1;data_r = 9; endelse20beginif (up_down =1) begin /加计数 data_r = data_r +1;c = 0 ;endelse begin/减计数data_r = data_r -1 ;c = 0 ;endendend assign seven_seg =Y_r;数码管 *reg 7
21、:0 Y_r;always (data_r ) /用 7 段数码管显示计数 输出beginY_r =8b11111111;case (data_r )4b0000: Y_r = 8b00000011; /显示 04b0001: Y_r = 8b10011111; /显示 14b0010: Y_r = 8b00100101; /显示 2214b0011: Y_r = 8b00001101; /显示 3 4b0100: Y_r = 8b10011001; /显示 4 4b0101: Y_r = 8b01001001; /显示 5 4b0110: Y_r = 8b01000001; /显示 6 4b
22、0111: Y_r = 8b00011111; /显/ 示 7 4b1000: Y_r = 8b00000001; /显示 8 4b1001: Y_r = 8b00001001; /显示 9 default: Y_r = 8b11111111; /默认数码管 不发光endcase end endmodule12、顺序脉冲发生器 module pulsegen ( Q ,clr ,clk); input clr ; /异步预置数 wire clr ; input clk ; /时钟输入 wire clk ;output 7:0 Q ;/顺序脉冲输出 wire 7:0 Q ; reg 7:0 te
23、mp ; reg x;assign Q =temp;22always ( posedge clk or posedge clr ) beginif ( clr=1) begin temp = 8b00000001; /temp寄存预定的 序列x= 0 ; end else beginx= temp7 ; /序列最高位输出 temp = temp1 ; /temp 左移一位 temp0 =x; / 将输出的结果赋给序列最 低位,实现序列的循环输出end end endmodule13、序列信号发生器 module xlgen ( Q ,clk ,res); input clk ; /时钟输入 wire clk ; input res ; /异步预置数 wire res ;23output Q ; /序列信号输出 reg Q ;reg 7:0 Q_r ; always ( posedge clk or posedge res) beginif (res =1) beginQ = 1b0;Q_r = 8b11100100 ;/Q_r 寄存预定 的序列end elsebeginQ = Q_r7; / 序列最高位输出Q_r = Q_r1; /Q_r 左移一位Q_r0 =Q; /将输出的结果赋给序列 最低位,实现序列的循环输出endendendmodule2414、分频器module cl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业上班试用期合同
- 吉林公务员面试题及答案
- 会计兼职劳动合同范本
- 二手车购车协议
- 2025年绿色消费市场消费者行为引导策略创新与市场响应研究报告
- 2025年机械制造企业服务化转型对市场营销的影响研究报告
- 2025年废旧塑料回收利用技术革新与产业布局分析报告
- 消除疟疾培训知识课件
- 板内变形机制-洞察及研究
- plc改造项目培训课件
- 税务会计与税收筹划课件
- 城市照明设计案例赏析
- 2025年高考生物辽宁卷真题解读及复习备考指导(黑龙江吉林内蒙古适用)
- 新媒体视听节目制作
- 数字化教学环境下小学语文板书设计优化策略
- JG/T 237-2008混凝土试模
- JG/T 232-2008卫浴型散热器
- 灭火员初级习题库
- T/CAQP 001-2017汽车零部件质量追溯体系规范
- 燃气入户可行性报告
- 技术赋能医疗创新-深入解析数字化口腔诊所建设指南
评论
0/150
提交评论