1.學(xué)習(xí)目標(biāo):設(shè)計(jì)3—8譯碼器
2.真值表
3.編寫verilog代碼
//聲明
module decoder3_8(
a,b,c,
out
);
//說明
input a;
input b;
input c;
output [7:0]out;
reg [7:0] out; //因?yàn)閛ut在always塊中使用,要定義成reg類型
//時(shí)序邏輯
always @(a,b,c) //always@(*)
begin
case({a,b,c})
3'b000: out=8'b0000_0001;
3'b001: out=8'b0000_0010;
3'b010: out=8'b0000_0100;
3'b011: out=8'b0000_1000;
3'b100: out=8'b0001_0000;
3'b101: out=8'b0010_0000;
3'b110: out=8'b0100_0000;
3'b111: out=8'b1000_0000;
endcase
//可加default
end
endmodule
4.編寫仿真激勵(lì)代碼
//
`timescale 1 ns/ 1 ns //設(shè)置精度
module decoder3_8_vlg_tst();
// constants
// general purpose registers
// test vector input registers
reg a;
reg b;
reg c;
// wires
wire [7:0] out;
// assign statements (if any)
decoder3_8 i1 (
// port map - connection between master ports and signals/registers
.a(a),
.b(b),
.c(c),
.out(out)
);
initial
begin
// code that executes only once
// insert code here --> begin
a=0;b=0;c=0;
#200;
a=0;b=0;c=1;
#200;
a=0;b=1;c=0;
#200;
a=0;b=1;c=1;
#200;
a=1;b=0;c=0;
#200;
a=1;b=0;c=1;
#200;
a=1;b=1;c=0;
#200;
a=1;b=1;c=1;
#200; //延時(shí)200ns
$stop;
// --> end
$display("Running testbench");
end
endmodule
5.測(cè)試結(jié)果
6.總結(jié)問題
verilog語言中的數(shù)據(jù)類型,在編寫仿真文件的過程中,在case語句下,最開始編寫的是:
3'b000: out=0000_0001;
3'b001: out=0000_0010;
3'b010: out=0000_0100;
沒有在后面的數(shù)據(jù)加上8‘b
導(dǎo)致在最后查波形的時(shí)候,一直出現(xiàn)問題,原因是對(duì)Verilog數(shù)據(jù)類型還是不夠清楚。下面是Verilog中的數(shù)字表示方法(1)整數(shù)在verilog語言中,數(shù)字的表示方式有三種:1.<位寬><進(jìn)制><數(shù)字>比如:8‘b 0000_0001 屬于全面的描述方式2.<進(jìn)制><數(shù)字>比如:b 001 屬于缺省位寬的描述方式,機(jī)器的系統(tǒng)決定,至少32位3.<數(shù)字>比如: 2 缺省進(jìn)制十進(jìn)制描述
(2)x和z的值
在數(shù)字電路中,x代表不定值,z代表高阻值。
(3)負(fù)數(shù)“-”號(hào)必須寫在最前面,比如-8‘b0000_0001(4)下劃線下劃線可以提高數(shù)字書寫時(shí),讓程序更具有可讀性,只能用在數(shù)字之間,也就是“_”的前面肯定是數(shù)字。比如寫50MHz,可寫成50_000_000Hz