北邮电子院专业实验报告Word格式文档下载.doc
《北邮电子院专业实验报告Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《北邮电子院专业实验报告Word格式文档下载.doc(35页珍藏版)》请在冰豆网上搜索。
parametersize=1;
output[size-1:
0]out;
input[size-1:
0]b,a;
inputsel;
assignout=(!
sel)?
a:
(sel)?
b:
{size{1'
bx}};
endmodule
mux_test.v
`definewidth8
`timescale1ns/1ns
modulemux_test;
reg[`width:
1]a,b;
wire[`width:
1]out;
regsel;
scale_mux#(`width)m1(.out(out),.sel(sel),.b(b),.a(a));
initial
begin
$monitor($stime,,"
sel=%ba=%bb=%bout=%b"
sel,a,b,out);
$dumpvars(2,mux_test);
sel=0;
b={`width{1'
b0}};
a={`width{1'
b1}};
#5sel=0;
#5sel=1;
#5$finish;
end
四、仿真结果与波形
LAB2:
简单时序逻辑电路的设计
掌握基本时序逻辑电路的实现。
在VerilogHDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。
在可综合的VerilogHDL模型中,我们常使用always块和@(posedgeclk)或@(negedgeclk)的结构来表述时序逻辑。
在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。
为了正确地观察到仿真结果,在可综合的模块中我们通常定义一个复位信号rst-,当它为低电平时对电路中的寄存器进行复位。
counter.v
`timescale1ns/100ps
modulecounter(cnt,clk,data,rst_,load);
output[4:
0]cnt;
input[4:
0]data;
inputclk;
inputrst_;
inputload;
reg[4:
0]cnt;
always@(posedgeclkornegedgerst_)
if(!
rst_)
#1.2cnt<
=0;
else
if(load)
cnt<
=#3data;
else
=#4cnt+1;
endmodule
counter_test.v
modulecounter_test;
wire[4:
reg[4:
regrst_;
regload;
regclk;
counterc1
(
.cnt(cnt),
.clk(clk),
.data(data),
.rst_(rst_),
.load(load)
);
initialbegin
clk=0;
foreverbegin
#10clk=1'
b1;
b0;
end
initial
begin
$timeformat(-9,1,"
ns"
9);
$monitor("
time=%t,data=%h,clk=%b,rst_=%b,load=%b,cnt=%b"
$stime,data,clk,rst_,load,cnt);
$dumpvars(2,counter_test);
taskexpect;
0]expects;
if(cnt!
==expects)begin
$display("
Attime%tcntis%bandshouldbe%b"
$time,cnt,expects);
TESTFAILED"
);
$finish;
endtask
@(negedgeclk)
{rst_,load,data}=7'
b0_X_XXXXX;
@(negedgeclk)expect(5'
h00);
{rst_,load,data}=7'
b1_1_11101;
h1D);
b1_0_11101;
repeat(5)@(negedgeclk);
expect(5'
h02);
b1_1_11111;
h1F);
$display("
TESTPASSED"
$finish;
五、思考题
该电路中,rst-是同步还是异步清零端?
在counter.v的always块中reset没有等时钟,而是直接清零。
所以是异步清零端。
LAB3:
使用预定义的库元件来设计八位寄存器。
八位寄存器中,每一位寄存器由一个二选一MUX和一个触发器dffr组成,当load=1,装载数据;
当load=0,寄存器保持。
对于处理重复的电路,可用数组条用的方式,使电路描述清晰、简洁。
clock.v
`timescale1ns/1ns
moduleclock(clk);
regclk;
outputclk;
initialbegin
clk=0;
foreverbegin
#10clk=1'
end
mux及dffr模块调用代码
muxmux7
(.out(n1[7]),
.sel(load),
.b(data[7]),
.a(out[7])
dffrdffr7
(.q(out[7]),
.d(n1[7]),
.clk(clk),
.rst_(rst_)
muxmux6
(.out(n1[6]),
.b(data[6]),
.a(out[6])
dffrdffr6
(.q(out[6]),
.d(n1[6]),
muxmux5
(.out(n1[5]),
.b(data[5]),
.a(out[5])
dffrdffr5
(.q(out[5]),
.d(n1[5]),
muxmux4
(.out(n1[4]),
.b(data[4]),
.a(out[4])
dffrdffr4
(.q(out[4]),
.d(n1[4]),
muxmux3
(.out(n1[3]),
.b(data[3]),
.a(out[3])
dffrdffr3
(.q(out[3]),
.d(n1[3]),
muxmux2
(.out(n1[2]),
.b(data[2]),
.a(out[2])
dffrdffr2
(.q(out[2]),
.d(n1[2]),
muxmux1
(.out(n1[1]),
.b(data[1]),
.a(out[1])
dffrdffr1
(.q(out[1]),
.d(n1[1]),
muxmux0
(.out(n1[0]),
.b(data[0]),
.a(out[0])
dffrdffr0
(.q(out[0]),
.d(n1[0]),
例化寄存器
registerr1
(
.data(data),
.out(out),
.