硬件描述语言范例_第1页
硬件描述语言范例_第2页
硬件描述语言范例_第3页
硬件描述语言范例_第4页
硬件描述语言范例_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

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 begin case a 编码器某一输入端口为高电平输出相应的 3 位二进制数 8 b0000 0001 b 3 b000 0 8 b0000 0010 b 3 b001 1 8 b0000 0100 b 3 b010 2 8 b0000 1000 b 3 b011 3 8 b0001 0000 b 3 b100 4 8 b0010 0000 b 3 b101 5 8 b0100 0000 b 3 b110 6 8 b1000 0000 b 3 b111 7 default b 3 b000 其他情况编码器输出 3 b000 endcase end endmodule 2 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 output GS 优先编码器工作状态标志 编码器的八个输入端有信号输入时 GS 0 reg GS output EO 输出使能 reg EO always I or EI if EI 使用 if else if 表明条件的优先级顺序 begin A 3 b111 GS 1 EO 1 end else if I 7 0 begin A 3 b000 2 GS 0 EO 1 end else if I 6 0 begin A 3 b001 GS 0 EO 1 end else if I 5 0 begin A 3 b010 GS 0 EO 1 end else if I 4 0 begin A 3 b011 GS 0 EO 1 end else if I 3 0 begin A 3 b100 GS 0 EO 1 end else if I 2 0 begin A 3 b101 GS 0 EO 1 end else if I 1 0 begin A 3 b110 GS 0 EO 1 end else if I 0 0 begin A 3 b111 GS 0 EO 1 3 end else if I 8 b11111111 begin A 3 b111 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 begin s G2 G3 if G1 0 G1 为低有效 Y 8 b1111 1111 else if s Y 8 b1111 1111 else case A 3 b000 Y 8 b1111 1110 3 b001 Y 8 b1111 1101 3 b010 Y 8 b1111 1011 3 b011 Y 8 b1111 0111 3 b100 Y 8 b1110 1111 3 b101 Y 8 b1101 1111 3 b110 Y 8 b1011 1111 3 b111 Y 8 b0111 1111 endcase end endmodule 4 数据选择器 数据选择器 module mux8 1 verilog Y A D0 D1 D2 D3 D4 D5 D6 D7 G 4 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 时数据选择器正常工作 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 begin if G 1 使能端的优先级高 Y B 5 Y B 时 Y 输出 3 b001 else if A B Y 3 b010 A B 时 Y 输出 3 b010 else Y 3 b100 A B 时 Y 输出 3 b100 end endmodule 6 全加器 全加器 module sum verilog A Co B S Ci input A 输入加数 A wire A input B 输入加数 B wire B input Ci 相邻低位的进位输入信号 wire Ci output Co 向相邻高位的进位输出信号 reg Co output S 相加和数输出 reg S always A or B or Ci begin if A 0 Co 0 end else if A 1 Co 0 end else if A 0 Co 0 end else if A 1 Co 1 end else if A 0 6 Co 0 end else if A 1 Co 1 end else if A 0 Co 1 end else begin S 1 Co 1 end end endmodule 7 D 触发器触发器 module Dflipflop 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 begin if RESET RESET 下降沿将 D 触发器输出清零 Q 0 else if SET SER 下降沿将 D 触发器输出置 1 Q 1 else Q D CLK 上升沿 D 触发器输出等于输入 end endmodule 7 8 寄存器 寄存器 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 7 0 DOUT always posedge clk or posedge clr begin if clr 1 b1 DOUT 0 else DOUT D end endmodule 9 双向移位寄存器 双向移位寄存器 module shiftdata left right load clr clk DIN DOUT input left right 左移右移控制信号 wire left right input load 异步置数信号 有效时将 DIN 输入 wire load input clr 异步清零信号 高有效 wire 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 clr or posedge load begin if clr 1 异步清零 data r 0 else if load 异步置数 data r DIN else begin if left right left right 1 信号左移 begin 8 data r data r 1 data r 0 0 移出位补 0 end else begin left right 0 信号右移 data r 1 data r 3 0 移出位补 0 end end end endmodule 10 4 位二进制加减法计数器位二进制加减法计数器 module counter4 load clr c DOUT clk up down DIN input load 异步预置数 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 posedge clk or posedge clr or posedge load begin if clr 1 异步清零 data r 0 else if load 1 异步预置 data r DIN else begin if up down 1 加计数 begin if data r 4 b1111 begin data r 4 b0000 c 1 end else begin data r data r 1 c 0 9 end end else 减计数 begin if data r 4 b0000 begin data r 4 b1111 c 1 end else begin data r data r 1 c 0 end end end end endmodule 11 十进制加减法计数器 十进制加减法计数器 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 input 3 0 DIN 预置数输入 wire 3 0 DIN output c 进位 借位输出 可以用于计数器的级联 reg c output 3 0 DOUT 计数输出 output 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 begin if clr 1 异步清零 data r 0 else if load 1 异步预置 data r DIN else if up down 1 data r 4 b0000 end else if up down 0 data r 9 end else begin if up down 1 begin 加计数 data r data r 1 c 0 end else begin 减计数 data r data r 1 c 0 end end end 数码管 assign seven seg Y r reg 7 0 Y r always data r 用 7 段数码管显示计数输出 begin Y r 8 b11111111 case data r 4 b0000 Y r 8 b00000011 显示 0 4 b0001 Y r 8 b10011111 显示 1 4 b0010 Y r 8 b00100101 显示 2 4 b0011 Y r 8 b00001101 显示 3 4 b0100 Y r 8 b10011001 显示 4 4 b0101 Y r 8 b01001001 显示 5 4 b0110 Y r 8 b01000001 显示 6 4 b0111 Y r 8 b00011111 显示 7 4 b1000 Y r 8 b00000001 显示 8 4 b1001 Y r 8 b00001001 显示 9 default Y r 8 b11111111 默认数码管不发光 endcase end endmodule 12 顺序脉冲发生器 顺序脉冲发生器 module pulsegen Q clr clk input clr 异步预置数 11 wire clr input clk 时钟输入 wire clk output 7 0 Q 顺序脉冲输出 wire 7 0 Q reg 7 0 temp reg x assign Q temp always posedge clk or posedge clr begin if clr 1 begin temp 8 b00000001 temp 寄存预定的序列 x 0 end else begin x temp 7 序列最高位输出 temp temp 1 temp 左移一位 temp 0 x 将输出的结果赋给序列最低位 实现序列的循环输出 end end endmodule 13 序列信号发生器 序列信号发生器 module xlgen Q clk res input clk 时钟输入 wire clk input res 异步预置数 wire res output Q 序列信号输出 reg Q reg 7 0 Q r always posedge clk or posedge res begin if res 1 begin Q 1 b0 Q r 8 b11100100 Q r 寄存预定的序列 end else begin Q Q r 7 序列最高位输出 Q r Q r 1 Q r 左移一位 Q r 0 Q 将输出的结果赋给序列最低位 实现序列的循环输出 12 end end endmodule 13 14 分频器 分频器 module clock

温馨提示

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

评论

0/150

提交评论