數(shù)電基礎(chǔ)
加法器用于兩個數(shù)或者多個數(shù)的加和,加法器又分為半加器(half adder)和全加器(full adder)。半加器電路是指對兩個輸入數(shù)據(jù)位相加,輸出一個結(jié)果位和進(jìn)位,沒有進(jìn)位輸入的加法器電路。是實(shí)現(xiàn)兩個一位二進(jìn)制數(shù)的加法運(yùn)算電路。而全加器除了加數(shù)和被加數(shù)之和外還要加上上一級傳進(jìn)來的進(jìn)位信號。如果沒有理解,看真值表和邏輯式就理解了。
全加器可看作兩個半加器和一個或門組成。
設(shè)計規(guī)劃
本例中我們實(shí)現(xiàn)最簡單的半加器。這個示例中,采用兩個按鍵作為信號輸入A和B,兩個LED燈作為輸出C和S。按下按鍵為低電平,LED燈為低電平時點(diǎn)亮。需要實(shí)現(xiàn)的功能是,按下AB時CS點(diǎn)亮,按下其中一個時只有C點(diǎn)亮,都不按下時只有S點(diǎn)亮。
根據(jù)真值表很容易畫出波形。
編寫代碼
module half_adder
(
input wire in1 ,
input wire in2 ,
output wire sum ,
output wire cout
);
assign {cout, sum} = in1 + in2;
endmodule
添加.v文件后編譯通過。點(diǎn)擊RTL viewer可以查看設(shè)計的硬件電路結(jié)構(gòu),和我們設(shè)計所表達(dá)的意思相同。
編寫testbench
`timescale 1ns/1ns
module tb_half_adder();
reg in1;
reg in2;
wire sum;
wire cout;
initial begin
in1 <= 1'b0;
in2 <= 1'b0;
end
always #10 in1 <= {$random} % 2;
always #10 in2 <= {$random} % 2;
//--------------------half_adder_inst-----------------
half_adder half_adder_inst
(
.in1 (in1 ), //input in1
.in2 (in2 ), //input in2
.sum (sum ), //output sum
.cout (cout ) //output cout
);
endmodule
又是超級熟悉的testbench。
對比波形
波形與預(yù)想的一致。
分配管腳
按照設(shè)計規(guī)劃:采用S0和S1作為信號輸入A和B,LED0和LED1作為輸出C和S。按下AB(0+0)時CS(=00)都亮,按下其中一個(0+1)時只有C(01)亮,都不按下(1+1)時只有S(=10)亮。
全編譯后上板驗(yàn)證
都不按時LED1亮
任意按一個時,LED0亮。
兩個都按下時,LED0和LED1都亮。
在完成這幾個實(shí)例的過程中,遇到了很多錯誤,但是只要會上網(wǎng),把報錯信息進(jìn)行檢索,都能圓滿解決。
-
led燈
+關(guān)注
關(guān)注
22文章
1592瀏覽量
107999 -
加法器
+關(guān)注
關(guān)注
6文章
183瀏覽量
30125 -
RTL
+關(guān)注
關(guān)注
1文章
385瀏覽量
59785 -
全加器
+關(guān)注
關(guān)注
10文章
62瀏覽量
28506
發(fā)布評論請先 登錄
相關(guān)推薦
評論