国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【FPGA & Verilog】4bitBCD碼加法器+7段數(shù)碼管

這篇具有很好參考價值的文章主要介紹了【FPGA & Verilog】4bitBCD碼加法器+7段數(shù)碼管。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

【FPGA & Verilog】4bitBCD碼加法器+7段數(shù)碼管,FPGA學(xué)習(xí)記錄,fpga開發(fā)

頂層文件:

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),// 基準(zhǔn)時鐘
.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; //六位控制六個數(shù)碼管
//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,// 基準(zhǔn)時鐘
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

可私信獲取項目文件文章來源地址http://www.zghlxwxcb.cn/news/detail-801269.html

到了這里,關(guān)于【FPGA & Verilog】4bitBCD碼加法器+7段數(shù)碼管的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【FPGA】Verilog:模塊化組合邏輯電路設(shè)計 | 半加器 | 全加器 | 串行加法器 | 子模塊 | 主模塊

    【FPGA】Verilog:模塊化組合邏輯電路設(shè)計 | 半加器 | 全加器 | 串行加法器 | 子模塊 | 主模塊

    前言: 本章內(nèi)容主要是演示Vivado下利用Verilog語言進(jìn)行電路設(shè)計、仿真、綜合和下載 示例:加法器 ? ? 功能特性:?采用?Xilinx Artix-7 XC7A35T芯片? 配置方式:USB-JTAG/SPI Flash 高達(dá)100MHz 的內(nèi)部時鐘速度? 存儲器:2Mbit SRAM ??N25Q064A SPI Flash(樣圖舊款為N25Q032A) 通用IO:Switch :

    2024年02月15日
    瀏覽(24)
  • Verilog 加法器/減法器

    Verilog 加法器/減法器

    目錄 1位加法器 8位加法器 8位補(bǔ)碼加減法器? 32位補(bǔ)碼加減法器? ? ? ?

    2024年02月11日
    瀏覽(15)
  • 數(shù)字IC經(jīng)典電路(1)——經(jīng)典加法器的實(shí)現(xiàn)(加法器簡介及Verilog實(shí)現(xiàn))

    數(shù)字IC經(jīng)典電路(1)——經(jīng)典加法器的實(shí)現(xiàn)(加法器簡介及Verilog實(shí)現(xiàn))

    加法器是數(shù)字系統(tǒng)最基礎(chǔ)的計算單元,用來產(chǎn)生兩個數(shù)的和,加法器是以二進(jìn)制作運(yùn)算。負(fù)數(shù)可用二的補(bǔ)數(shù)來表示,減法器也是加法器,乘法器可以由加法器和移位器實(shí)現(xiàn)。加法器和乘法器由于會頻繁使用,因此加法器的速度也影響著整個系統(tǒng)的計算速度。對加法器的設(shè)計也

    2024年02月14日
    瀏覽(21)
  • Verilog實(shí)現(xiàn)超前進(jìn)位加法器

    Verilog實(shí)現(xiàn)超前進(jìn)位加法器

    在CPU等對性能要求較高的電路中,一般都會采用超前進(jìn)位加法器,因為超前進(jìn)位加法器的延時相對來說比較小。下面講述超前進(jìn)位加法器的原理: 我們知道,一個三輸入,二輸出的全加器,其邏輯關(guān)系為 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日
    瀏覽(16)
  • FPGA加法器實(shí)現(xiàn)與資源消耗-四位數(shù)加法器

    FPGA加法器實(shí)現(xiàn)與資源消耗-四位數(shù)加法器

    測試在實(shí)現(xiàn)半加器和全加器的基礎(chǔ)上開始實(shí)現(xiàn)多位數(shù)的加法器 可以按照一位全加器,然后循環(huán)實(shí)現(xiàn)多位加法器。 相加正確,功能正確。 可能看不太清,但是基本就是按照與、或、異或進(jìn)行連接,而且是串行實(shí)現(xiàn)的。 分析可知,工具使用兩個查找表(SUM[0]_INST_0,SUM[1]_INST_0)實(shí)

    2024年02月03日
    瀏覽(15)
  • 【verilog】6位二進(jìn)制數(shù)加法器

    【verilog】6位二進(jìn)制數(shù)加法器

    1:掌握無符號二進(jìn)制數(shù)加法器的設(shè)計方法。 2:掌握使用Modelsim對verilog程序進(jìn)行仿真和驗證的方法。 二進(jìn)制加法器由全加器構(gòu)成,全加器功能和電路圖如下圖所示。 全加器對兩個1位二進(jìn)制數(shù)和1位來自低位的進(jìn)位做加法運(yùn)算,產(chǎn)生1位和和1位向更高位的進(jìn)位。圖中(a)是全加

    2024年02月06日
    瀏覽(29)
  • 各種加法器的比對分析與Verilog實(shí)現(xiàn)(1)

    各種加法器的比對分析與Verilog實(shí)現(xiàn)(1)

    ????????接下來幾篇博客,我將介紹常見的幾種加法器設(shè)計,包括超前進(jìn)位、Kogge-Stone、brent-kung、carry-skip、Conditional-Sum等加法器的原理及Verilog實(shí)現(xiàn)。 ???????本文將介紹行波進(jìn)位加法器、超前進(jìn)位加法器的原理及Verilog實(shí)現(xiàn)。 1.1 原理 ???????從下方原理圖即可看出,

    2024年02月08日
    瀏覽(16)
  • verilog全加器和四位加法器

    verilog全加器和四位加法器

    半加器: 保存為half_addr.bsf之后,可以在該項目中添加半加器 全加器: 通過RTL-Viewer查看半加器和全加器 添加全加器到項目 在process里面先后執(zhí)行start fitter 和start time analyzer 生成testbench模板 修改testbench文件: 添加到項目 注意在聯(lián)合modelsim時讓generate functinal simulation netlist值為

    2024年02月07日
    瀏覽(19)
  • verilog數(shù)組的定義、轉(zhuǎn)換和加法器的實(shí)現(xiàn)

    verilog數(shù)組的定義、轉(zhuǎn)換和加法器的實(shí)現(xiàn)

    看了別人的博客有的人也稱reg [31:0] add0[0:12]這樣的數(shù)組為二維數(shù)組,其實(shí)中二維數(shù)組不是真正意義上的數(shù)組,而是由多個寄存器組成的ROM或者RAM。我覺得這樣理解好記一點(diǎn):這個是一維數(shù)組,一共有0到12共13組數(shù)據(jù),每組數(shù)據(jù)的寬度是0到31一共32個位寬。 優(yōu)勢:簡單易于編程

    2024年02月11日
    瀏覽(20)
  • 各種加法器的比對分析與Verilog實(shí)現(xiàn)(2)

    各種加法器的比對分析與Verilog實(shí)現(xiàn)(2)

    ? ? ? 本文將介紹Kogge-Stone加法器和brent-kung加法器的原理,在下一篇博客中我將用Verilog進(jìn)行實(shí)現(xiàn)。 目錄 1. 并行前綴加法器(Parallel-Prefix Adder, PPA)? 2. Kogge-Stone加法器原理 3. brent-kung加法器原理 ???????為了減少AND門的深度,PPA對CLA進(jìn)行了進(jìn)一步優(yōu)化。不過PPA和CLA進(jìn)行的計算

    2024年02月07日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包