|
可算是放寒假了。。。淚目!
簡(jiǎn)報(bào)
眾所周知,74ls138是一種應(yīng)用廣泛的電子元器件。其本體共有3+3+8+1+1=16根引腳,其中,電源與接地口我們直接忽略掉吧(畢竟這兄弟倆也沒(méi)什么大用處。。。也許吧)。 因此,本篇文章將利用Verilog HDL對(duì) 74ls138 16個(gè)接口中的14個(gè)接口功能進(jìn)行實(shí)現(xiàn)。
引腳
74ls138邏輯符號(hào)中的14個(gè)引腳及其功能如下:
1. 地址端:共3個(gè),按高低順序組成二進(jìn)制代碼,通過(guò)數(shù)字的先后順序?qū)?yīng)8個(gè)數(shù)據(jù)輸出端,為主要實(shí)現(xiàn)功能的端口之一。
2. 輸出端:為主要實(shí)現(xiàn)功能的端口之一,共8個(gè),根據(jù)地址段輸入的信息,不同的輸出端將會(huì)作出相應(yīng)反應(yīng)(比如電平由高轉(zhuǎn)低)==注意:74ls138的8個(gè)輸出端輸出的為最小項(xiàng)的反,即默認(rèn)狀態(tài)下輸出均為1==。
3. 選通端:共3個(gè),為原件功能的開(kāi)關(guān)。當(dāng)且僅當(dāng)一個(gè)選通端為高電平,其余兩個(gè)選通端為低電平時(shí),允許原件進(jìn)行正常工作。
代碼
根據(jù)上述內(nèi)容,我們可以很容易地在Vivado上面利用Verilog HDL語(yǔ)言實(shí)現(xiàn)74ls138的功能。廢話不多說(shuō),我們直接上代碼。
module x74x138(
g1,g2,g3,a,y
); //定義模塊
input g1,g2,g3;
input [2:0] a;
output [7:0] y; //聲明輸入輸出量 這一步不能放到定義模塊中去
reg [7:0] y=0; //作為變量要聲明為reg
always @ *
begin
if(g1 && ~g2 && ~g3) //選通端
case(a)
7:y= 8'b01111111;
6:y= 8'b10111111;
5:y= 8'b11011111;
4:y= 8'b11101111;
3:y= 8'b11110111;
2:y= 8'b11111011;
1:y= 8'b11111101;
0:y= 8'b11111110;
default: y= 8'b11111111;
endcase
else
y= 8'b11111111;
end
endmodule
以上為74ls138的Verilog HDL代碼。我用的FPGA設(shè)計(jì)套件是Vivado,下面是對(duì)應(yīng)的仿真文件。
module SIM;
reg g1;
reg g2;
reg g3;
reg [2:0] a;
wire [7:0] y;
x74x138 u1(g1,g2,g3,a,y);
initial begin
g1=0;
g2=0;
g3=0;
a=0;
#100;
g1=1;
g2=0;
g3=0;
end
always #100 a=a+1;
endmodule
在仿真文件里,我們先令選通端均為低電平,在100ns后,改變電平狀態(tài),啟動(dòng)原件,并在每100ns將a的數(shù)值+1,以便驗(yàn)證功能。
小結(jié)
講真的,我自己都感覺(jué)這個(gè)東西寫(xiě)上去有點(diǎn)簡(jiǎn)單,不會(huì)有多少人會(huì)看。但是,我還是要把它認(rèn)真的寫(xiě)出來(lái),畢竟,這是我設(shè)計(jì)的第一個(gè)硬件,懂的都懂(剛學(xué)的時(shí)候這些東西都是能讓我抓狂的。。。),所以將他們寫(xiě)出來(lái)。一來(lái)便于對(duì)硬件的理解,二來(lái)幫助剛剛接觸到Verilog HDL的同仁更好的對(duì)代碼和仿真文件進(jìn)行一定的理解。就這樣吧。這幾天要是有時(shí)間我會(huì)把我初期寫(xiě)的一些代碼發(fā)出來(lái),正好當(dāng)做我博客的頭幾篇文章(別說(shuō),還真合適)。各位,拜拜嘍!
|
評(píng)分
-
查看全部評(píng)分
|