【FPGA & Verilog】4bitBCD码加法器+7段数码管

这篇具有很好参考价值的文章主要介绍了【FPGA & Verilog】4bitBCD码加法器+7段数码管。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【FPGA & Verilog】4bitBCD码加法器+7段数码管,FPGA学习记录,fpga开发

顶层文件:

module add_bcd(
input [9:0]I_1,
input [9:0]I_0,
input clk,
input rst_n,
output [7:0]seg,
output [7:0]value,
output select,
output  [3:0]encode_1,
output  [3:0]encode_0,
output  [3:0]high_bit,
output  [3:0]low_bit
);

assign value ={high_bit,low_bit};

encoder encoder_inst2(
.in(I_1),
.out(encode_1)
);

encoder encoder_inst1(
.in(I_0),
.out(encode_0)
);

bcd_adder bcd_adder_0(
.A(encode_1),
.B(encode_0),
.Sum(low_bit),
.Cout(high_bit)
);

divider_N divider_N1(
.clk_50m(clk),// 基准时钟
.rst_n(rst_n),
.clk_1hz(select)// N 分频后得到的时钟
);

display_driver display_driver1(
.value(value),
.seg(seg),
.select(select)
);


endmodule

测试文件:

`timescale 1ns/1ns
module add_bcd_tb();
reg [9:0]I_1;
reg [9:0]I_0;
reg clk;
reg rst_n;
wire [7:0]seg;
wire [7:0]value;
wire select;
wire [3:0]encode_1;
wire  [3:0]encode_0;
wire  [3:0]high_bit;
wire  [3:0]low_bit;
add_bcd u1(
.I_1(I_1),
.I_0(I_0),
.clk(clk),
.rst_n(rst_n),
.seg(seg),
.value(value),
.select(select),
.encode_1(encode_1),
.encode_0(encode_0),
.high_bit(high_bit),
.low_bit(low_bit)
);
initial begin
    clk=0 ;
    rst_n=0 ;
    #20 rst_n=1;
    #300 I_0=10'b1111111110;I_1=10'b1111111101;
    #300 I_0=10'b1111111101;I_1=10'b1111111011;
    #300 I_0=10'b1111111011;I_1=10'b1111110111;
    #300 I_0=10'b1111110111;I_1=10'b1111101111;
   #300 I_0=10'b1111101111;I_1=10'b1111011111;
    #300 I_0=10'b1111011111;I_1=10'b1110111111;
   #300 I_0=10'b1110111111;I_1=10'b1101111111;
    #300 I_0=10'b0111111111;I_1=10'b0111111111;
    #300 I_0=10'b1111111110;I_1=10'b1111111101;
    #300 I_0=10'b1111111101;I_1=10'b1111111011;
    #300 I_0=10'b1111111011;I_1=10'b1111110111;
    #300 I_0=10'b1111110111;I_1=10'b1111101111;
      #300 I_0=10'b1111111110;I_1=10'b1111111101;

end
always #10 clk=~clk;
endmodule


module bcd_adder(A,B,Sum,Cout);
    input [3:0]A,B;
    output [3:0]Sum;
    output [3:0]Cout;
    wire [4:0]Temp;
    
    assign Temp = A + B ;
    assign {Cout,Sum} = (Temp > 4'd9)? Temp+4'd6 : Temp;
    
endmodule

module display_driver(
    input wire [7:0] value,
    output reg [7:0] seg,
     input select
);
wire [3:0]number;
assign number = select ? value[7:4] : value [3:0]; 
always @(*) begin
    case ({number})
        4'b0000: begin seg <= 8'b11000000; end// 0
        4'b0001: begin seg <= 8'b11111001; end// 1
        4'b0010: begin seg <= 8'b10100100; end// 2
        4'b0011: begin seg <= 8'b10110000; end// 3
        4'b0100: begin seg <= 8'b10011001; end// 4
        4'b0101: begin seg <= 8'b10010010; end// 5
        4'b0110: begin seg <= 8'b10000010; end// 6
        4'b0111: begin seg <= 8'b11111000; end// 7
        4'b1000: begin seg <= 8'b10000000;  end// 8
        4'b1001: begin seg <= 8'b10010000; end// 9
        default: begin seg <= 8'b00000000; end// Error
    endcase
    end

endmodule


//
//module seg(clk,rst_n,data,dig,led);
//input clk;
//input rst_n;
//input [23:0] data;
//output reg [5:0] dig; //六位控制六个数码管
//output reg [7:0] led;
//
//reg [3:0] d;
//always@ (posedge clk or negedge rst_n ) begin
//    if(~rst_n)
//    led<= 8'b0;
//    else begin
//    case (d)
//    4'h0:led<= 8'b00111111 ;//0
//    4'h1:led<= 8'b00000110;//1
//    4'h2:led<= 8'b01011011 ;//2
//    4'h3:led<= 8'b01001111 ;//3
//    4'h4:led<= 8'b01100110;//4
//    4'h5:led<= 8'b01101101 ;//5
//    4'h6:led<= 8'b01111101 ;//6
//    4'h7:led<= 8'b00000111;//7
//    4'h8:led<= 8'b01111111 ;//8 
//    4'h9:led<= 8'b01101111 ;//9 
//    4'ha:led<= 8'b01110111 ;//a
//    4'hb:led<= 8'b01111100;//b
//    4'hc:led<= 8'b00111001 ;//c
//    4'hd:led<= 8'b01011110;//d
//    4'he:led<= 8'b01111001 ;//e
//    4'hf:led<= 8'b01110001 ;//f
//    default: led<=8'b0 ;
//    endcase
//    end
//end
//
//wire [2:0]cnt2;
//
//flag flag_m0 (
//.clk(clk),// INPUT
//.rst_n(rst_n),// INPUT
//.cnt(cnt2)
//);
//
//always@ (posedge clk or negedge rst_n ) begin
//     if(~rst_n)
//      dig<= 6'b0;
//     else begin 
//     case (cnt2)
//        3'd0 :begin dig<= 6'b000001; d<=data[3:0];end
//        3'd1 :begin dig<= 6'b000010; d<=data[7:4];end
//        3'd2 :begin dig<= 6'b000100; d<=data[11:8];end
//        3'd3 :begin dig<= 6'b001000; d<=data[15:12];end
//        3'd4 :begin dig<= 6'b010000; d<=data[19:16];end
//        3'd5 :begin dig<= 6'b100000; d<=data[23:20];end
//        default:begin dig <= 6'b0 ;end
//      endcase
//    end
//end
//
//endmodule

module encoder(
    input [9:0]in,
    output reg [3:0]out
    ); 
always @(*) begin
    if (in[9]==0) begin
        out = 4'b1001;
    end
    else if(in[8]==0) begin
        out = 4'b1000;
    end
    else if(in[7]==0) begin
        out = 4'b0111;
    end
    else if(in[6]==0) begin
        out = 4'b0110;
    end
    else if(in[5]==0) begin
        out = 4'b0101;
    end
    else if(in[4]==0) begin
        out = 4'b0100;
    end
    else if(in[3]==0) begin
        out = 4'b0011;
    end
    else if(in[2]==0) begin
        out = 4'b0010;
    end
     else if(in[1]==0) begin
        out = 4'b0001;
    end
     else if(in[0]==0) begin
        out = 4'b0000;
    end
     else
         out = 4'b0000;
end
endmodule

module divider_N(
clk_50m,// 基准时钟
rst_n,
clk_1hz// N 分频后得到的时钟
);
input clk_50m;
input rst_n;
output reg clk_1hz;
reg [24:0] cnt;
//parameter c_25m = 25'd24_999_999; //可改变这个值,改变输出频率。
parameter c_25m = 10'd5; //100khz
always@(posedge clk_50m or negedge rst_n)
if (!rst_n)
cnt <= 25'b0;
else if (cnt >= c_25m )
cnt <= 25'b0;
else
cnt <= cnt + 1'b1;

always@(posedge clk_50m or negedge rst_n)
if (!rst_n)
clk_1hz <= 1'b0;
else if (cnt == c_25m )
clk_1hz <= !clk_1hz;

endmodule

可私信获取项目文件文章来源地址https://www.toymoban.com/news/detail-801269.html

到了这里,关于【FPGA & Verilog】4bitBCD码加法器+7段数码管的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:加法器   ​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Switch :

    2024年02月15日
    浏览(35)
  • Verilog 加法器/减法器

    目录 1位加法器 8位加法器 8位补码加减法器  32位补码加减法器       

    2024年02月11日
    浏览(30)
  • 数字IC经典电路(1)——经典加法器的实现(加法器简介及Verilog实现)

    加法器是数字系统最基础的计算单元,用来产生两个数的和,加法器是以二进制作运算。负数可用二的补数来表示,减法器也是加法器,乘法器可以由加法器和移位器实现。加法器和乘法器由于会频繁使用,因此加法器的速度也影响着整个系统的计算速度。对加法器的设计也

    2024年02月14日
    浏览(38)
  • Verilog实现超前进位加法器

    在CPU等对性能要求较高的电路中,一般都会采用超前进位加法器,因为超前进位加法器的延时相对来说比较小。下面讲述超前进位加法器的原理: 我们知道,一个三输入,二输出的全加器,其逻辑关系为 S = A ⊕ B ⊕ C i n S=Aoplus Boplus C_{in} S = A ⊕ B ⊕ C in ​ C o u t = ( A B ) ∣

    2023年04月08日
    浏览(26)
  • FPGA加法器实现与资源消耗-四位数加法器

    测试在实现半加器和全加器的基础上开始实现多位数的加法器 可以按照一位全加器,然后循环实现多位加法器。 相加正确,功能正确。 可能看不太清,但是基本就是按照与、或、异或进行连接,而且是串行实现的。 分析可知,工具使用两个查找表(SUM[0]_INST_0,SUM[1]_INST_0)实

    2024年02月03日
    浏览(37)
  • 【verilog】6位二进制数加法器

    1:掌握无符号二进制数加法器的设计方法。 2:掌握使用Modelsim对verilog程序进行仿真和验证的方法。 二进制加法器由全加器构成,全加器功能和电路图如下图所示。 全加器对两个1位二进制数和1位来自低位的进位做加法运算,产生1位和和1位向更高位的进位。图中(a)是全加

    2024年02月06日
    浏览(31)
  • 各种加法器的比对分析与Verilog实现(2)

          本文将介绍Kogge-Stone加法器和brent-kung加法器的原理,在下一篇博客中我将用Verilog进行实现。 目录 1. 并行前缀加法器(Parallel-Prefix Adder, PPA)  2. Kogge-Stone加法器原理 3. brent-kung加法器原理        为了减少AND门的深度,PPA对CLA进行了进一步优化。不过PPA和CLA进行的计算

    2024年02月07日
    浏览(40)
  • verilog全加器和四位加法器

    半加器: 保存为half_addr.bsf之后,可以在该项目中添加半加器 全加器: 通过RTL-Viewer查看半加器和全加器 添加全加器到项目 在process里面先后执行start fitter 和start time analyzer 生成testbench模板 修改testbench文件: 添加到项目 注意在联合modelsim时让generate functinal simulation netlist值为

    2024年02月07日
    浏览(33)
  • 各种加法器的比对分析与Verilog实现(1)

            接下来几篇博客,我将介绍常见的几种加法器设计,包括超前进位、Kogge-Stone、brent-kung、carry-skip、Conditional-Sum等加法器的原理及Verilog实现。        本文将介绍行波进位加法器、超前进位加法器的原理及Verilog实现。 1.1 原理        从下方原理图即可看出,

    2024年02月08日
    浏览(36)
  • verilog数组的定义、转换和加法器的实现

    看了别人的博客有的人也称reg [31:0] add0[0:12]这样的数组为二维数组,其实中二维数组不是真正意义上的数组,而是由多个寄存器组成的ROM或者RAM。我觉得这样理解好记一点:这个是一维数组,一共有0到12共13组数据,每组数据的宽度是0到31一共32个位宽。 优势:简单易于编程

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包