Verilog HDL 典型组合逻辑电路设计
2017-12-03 15:27
447 查看
一.移位加三算法
1.将二进制数左移一位(未满 4 位在前面填 0)2.如果移动了 8 位,那么二进制数就在 百位、十位和个位列,计算结束
3.在任何一个 BCD 列中,如果任何一个二进制数 大于或者等于 5,就把这个数 加上 3
4.回到步骤 1
module bin2bcd8 ( input wire [7:0] binary, output wire [3:0] b, output wire [3:0] c, output wire [3:0] d ); /* z 作为存储 BCD 码和 二进制码的寄存器 如果输入为 8 位,那么 z 需要的长度为 0xFF = 255 ---> 10-0101-0101 +++ ????-???? 总共 18 位 */ reg [17:0] z; always @ (*) begin z = 18'b0; //置 0 z[7:0] = binary; //读入低 8 位 repeat (8) //重复 8 次 begin if(z[11:8 ]>4) //大于 4 就加 3 z[11:8 ] = z[11:8 ] + 2'b11; if(z[15:12]>4) z[15:12] = z[15:12] + 2'b11; z[17:1] = z[16:0]; //左移一位 end end assign b = z[17:16]; //输出 BCD 码 assign c = z[15:12]; assign d = z[11:8] ; endmodule
二.2-4译码器
module decoder2_4( out, EN, in); input EN; input [1:0] in; output [3:0] out; reg [3:0] out; always @(EN or in) begin if (EN == 1) // 使能信号有效 case (in) 2'b00 : out = 4'b0001; 2'b01 : out = 4'b0010; 2'b10 : out = 4'b0100; 2'b11 : out = 4'b1000; endcase else out = 4‘b0000; // 使能信号无效 end endmodule
三.8421码译码器
module decoder_8421 ( Y, en, A); input en; input [3:0] A; output [9:0] Y; reg [9:0] Y; always @(en or A) begin if (en == 1) // 使能信号有效 case (A) 4'b0000 : Y = 10'b0000000001; 4'b0001 : Y = 10'b0000000010; 4'b0010 : Y = 10'b0000000100; 4'b0011 : Y = 10'b0000001000; 4'b0100 : Y = 10'b0000010000; 4'b0101 : Y = 10'b0000100000; 4'b0110 : Y = 10'b0001000000; 4'b0111 : Y = 10'b0010000000; 4'b1000 : Y = 10'b0100000000; 4'b1001 : Y = 10'b1000000000; default : Y = 10'b0000000000; endcase else out = 10'b0000000000; // 使能信号无效 end endmodule
四.8421编码器
module Key_8421 ( Y, OUT, en, I); input en; input [9:0] I; output [3:0] Y; output OUT; reg [9:0] Y; reg OUT; always @(en or I) begin if (en == 1) // 使能信号有效,开始编码 case (I) 10'b0000000001 : {OUT, Y} = 5'b10000; 10'b0000000010 : {OUT, Y} = 5'b10001; 10'b0000000100 : {OUT, Y} = 5'b10010; 10'b0000001000 : {OUT, Y} = 5'b10011; 10'b0000010000 : {OUT, Y} = 5'b10100; 10'b0000100000 : {OUT, Y} = 5'b10101; 10'b0001000000 : {OUT, Y} = 5'b10110; 10'b0010000000 : {OUT, Y} = 5'b10111; 10'b0100000000 : {OUT, Y} = 5'b11000; 10'b1000000000 : {OUT, Y} = 5'b11001; default : {OUT, Y} = 5‘b00000; // 使能信号有效,但输入无有效信号或有多位有效信号 endcase else {OUT, Y} = 5‘b00000; // 使能信号无效,OUT = 0 end endmodule
五.四位二进制转8421 BCD
module _4bitBIN2bcd ( BCD1, BCD0, Bin); input [3:0] Bin; ouput reg [3:0] BCD1, BCD0; always @(Bin) begin {BCD1, BCD0} = 8'h00; if (Bin < 10) begin BCD1 = 4'h0; BCD0 = Bin; end else begin BCD1 = 4‘h1; // 如果Bin ≥ 10,则十位部分为1 BCD0 = Bin – 4'd10; // 各位部分等于Bin - 10 end end endmodule
相关文章推荐
- verilogHDL设计中的同步时序逻辑
- VerilogHDL可综合设计的注意事项
- Verilog HDL 有限状态机的设计
- (笔记)Verilog HDL设计时关于阻塞赋值和非阻塞赋值的8条指导原则以及原因。
- 【续】FPGA电路逻辑的Verilog HDL编程方式设计与验证
- hjr-FPGA:verilog HDL 编程与 testbench 设计
- Verilog HDL DDS设计(作业3)
- Verilog HDL DDS设计(作业3)
- Verilog HDL设计规范及经验谈(转载)
- Verilog HDL 与数字电路设计
- Verilog-FPGA硬件电路设计之一——if语句优先级(always块中的阻塞赋值生成的组合逻辑电路是按照顺利执行的)
- verilog HDL 的阻塞和非阻塞语句在FPGA各种设计中的分析
- Verilog HDL计数器设计(作业1)
- Verilog HDL && Quartus 设计规范、代码风格
- Verilog基础知识12(华为verilog典型电路设计--附件有源码 )
- Verilog HDL计数器设计(作业1)
- 基于潘文明至简设计法实现的PWM调制verilog
- 一个典型的采集服务器体系结构设计
- Verilog HDL语言中的模块调用
- 典型数据库架构设计与实践 | 架构师之路