可算是放寒假了。。。淚目!
簡報
眾所周知,74ls138是一種應用廣泛的電子元器件。其本體共有3+3+8+1+1=16根引腳,其中,電源與接地口我們直接忽略掉吧(畢竟這兄弟倆也沒什么大用處。。。也許吧)。 因此,本篇文章將利用Verilog HDL對 74ls138 16個接口中的14個接口功能進行實現。
引腳
74ls138邏輯符號中的14個引腳及其功能如下:
1. 地址端:共3個,按高低順序組成二進制代碼,通過數字的先后順序對應8個數據輸出端,為主要實現功能的端口之一。
2. 輸出端:為主要實現功能的端口之一,共8個,根據地址段輸入的信息,不同的輸出端將會作出相應反應(比如電平由高轉低)==注意:74ls138的8個輸出端輸出的為最小項的反,即默認狀態下輸出均為1==。
3. 選通端:共3個,為原件功能的開關。當且僅當一個選通端為高電平,其余兩個選通端為低電平時,允許原件進行正常工作。
代碼
根據上述內容,我們可以很容易地在Vivado上面利用Verilog HDL語言實現74ls138的功能。廢話不多說,我們直接上代碼。
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設計套件是Vivado,下面是對應的仿真文件。
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后,改變電平狀態,啟動原件,并在每100ns將a的數值+1,以便驗證功能。
小結
講真的,我自己都感覺這個東西寫上去有點簡單,不會有多少人會看。但是,我還是要把它認真的寫出來,畢竟,這是我設計的第一個硬件,懂的都懂(剛學的時候這些東西都是能讓我抓狂的。。。),所以將他們寫出來。一來便于對硬件的理解,二來幫助剛剛接觸到Verilog HDL的同仁更好的對代碼和仿真文件進行一定的理解。就這樣吧。這幾天要是有時間我會把我初期寫的一些代碼發出來,正好當做我博客的頭幾篇文章(別說,還真合適)。各位,拜拜嘍!
|