verilog实验报告程超.docx
- 文档编号:7530141
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:11
- 大小:83.09KB
verilog实验报告程超.docx
《verilog实验报告程超.docx》由会员分享,可在线阅读,更多相关《verilog实验报告程超.docx(11页珍藏版)》请在冰点文库上搜索。
verilog实验报告程超
西安邮电學院
基于Verilog的数字电路模拟实验
系部名称
:
通信与信息工程学院
学生姓名
:
张宏扬
专业名称
:
通信工程
班级
:
通工0809
学号
:
03081469(01)
时间
:
2010年12月20号
实验题目门级建模仿真实验
一、实验内容
设计的一个带有清零的顺序输出结果的计数器,q从0计数到15
二、技术规范
1、输入引脚:
reset,clk;输出引脚:
q。
2、功能:
这时也个具有清零的计数器,从0到15输出的。
在其中用到了T触发器和D触发器来实现它的功能。
三、实验步骤
1、在modulesim软件中对设计模块和验证模块进行书写和编译;
2、对编译好的模块进行仿真。
四、源代码:
//脉动进位计数器顶层模块
moduleripple_carry_counter(q,clk,reset);
output[3:
0]q;
inputclk,reset;
//生成了4个T触发器(T_FF)的实例,每个都有自己的名字
T_FFtff0(q[0],clk,reset);
T_FFtff1(q[1],q[0],reset);
T_FFtff2(q[2],q[1],reset);
T_FFtff3(q[3],q[2],reset);
endmodule
//触发器T_FF
moduleT_FF(q,clk,reset);
outputq;
inputclk,reset;
wired;
D_FFdff0(q,d,clk,reset);
notn1(d,q);//非门(not)是Verilog语言的内置原语部件(primitive)
endmodule
//D触发器(D_FF)
//带异步复位的D触发器(D_FF)
moduleD_FF(q,d,clk,reset);
outputq;
inputd,clk,reset;
regq;
//可以有许多种新结构,不考虑这些结构的功能,只需要注意设计块是如何以自顶向下的方式编写的
always@(posedgeresetornegedgeclk)
if(reset)
q<=1'b0;
else
q<=d;
endmodule
modulestimulus;
regclk;
regreset;
wire[3:
0]q;
//引用已经设计好的模块实例
ripple_carry_counterr1(q,clk,reset);
//控制驱动设计块的时钟信号,时钟周期为10个时间单位
initial
clk=1'b0;//把clk设置为0
always
#5clk=~clk;//每5个时间单位时钟翻转一次
//控制驱动设计块的reset信号
initial
begin
reset=1'b1;
#15reset=1'b0;
#180reset=1'b1;
#10reset=1'b0;
#20$finish;//终止仿真
end
//监视输出
initial
$monitor($time,"Outputq=%d",q);
endmodule
五、仿真结果及分析
仿真输出结果:
实验题目RS锁存器
一、实验内容
带有延迟的RS锁存器,写出其带有延迟的Verilog门级描述。
编写其激励模块,根据下面的输入-输出关系表对其功能进行验证。
set
reset
Qn+1
0
0
Qn
0
1
0
1
0
1
1
1
?
在设计完成后,写出激励模块对其进行仿真。
二、技术规范
1、输入引脚:
reset,set;输出引脚:
q,qbar,out。
2、功能:
这是具有延迟的RS锁存器。
Reset为置位端,set为置零端。
三、实验步骤
1、在modulesim软件中对设计模块和验证模块进行书写和编译;
2、对编译好的模块进行仿真。
四、源代码:
RS锁存器
1.设计模块:
moduleSR_lach(q,qbar,reset,set);
outputq,qbar;
inputreset,set;
nand#1(q,reset,qbar);
nand#1(qbar,set,q);
endmodule
2.验证模块:
moduleTop;
wireQ,Qbar;
regReset,Set;
SR_latch(.reset(Reset),.q(Q),.qbar(Qbar),.set(Set));
initial
begin
$monitor($time,"Set=%b,Reset=%b,Q=%b\n",Set,Reset,Q);
Set=0;Reset=0;
#5Reset=1;
#5Reset=0;
#5Set=1;
#5$finish;
end
endmodule
五、仿真结果及分析
RS锁存器
实验题目:
两个四位二进制的比较器
一、实验内容
大小比较器的功能是比较两个数之间的关系:
大于、小于或等于。
一个四位大小比较器的输入是两个四位数A和B。
我们可以将它们写成下面的形式,最左边的位为最高有效位:
A=A(3)A
(2)A
(1)A(0)
B=B(3)B
(2)B
(1)B(0)
两个数的比较可以从最高有效位开始,逐位进行。
如果两个位不相等,则该位值为0的数为较小的数。
为了用逻辑等式实现这个功能,我们需要定义一个中间变量x。
注意下面实现的是同或(xnor)的功能。
x(i)=A(i)B(i)+A(i)’B(i)’
大小比较器的三个输出为:
A_gt_B,A_lt_B和A_eq_B。
其计算公式为:
A_gt_B=A(3)B(3)’+x(3)A
(2)B
(2)’+x(3)x
(2)A
(1)B
(1)’+x(3)x
(2)x
(1)A(0)B(0)’
A_lt_B=A(3)’B(3)+x(3)A
(2)’B
(2)+x(3)x
(2)A
(1)’B
(1)+x(3)x
(2)x
(1)A(0)’B(0)
A_eq_B=x(3)x
(2)x
(1)x(0)
写出模块magnitude_comparator的Verilog描述。
写出激励模块并在模块中实例引用magnitude_comparator模块。
选择A和B的几种组合,对模块的功能进行测试。
二、实验步骤
1、在modulesim软件中对设计模块和验证模块进行书写和编译;
2、对编译好的模块进行仿真。
三、源代码:
modulestimulus;
reg[3:
0]A_out,B_out;
wireF1,F2,F3;
magnitude_comparatorsti(A_out,B_out,F1,F2,F3);
initial
begin
#0A_out=4'd0;B_out=4'd1;
#10A_out=4'd2;B_out=4'd2;
#10A_out=4'd5;B_out=4'd1;
#10A_out=4'd15;B_out=4'd10;
#10A_out=4'd10;B_out=4'd3;
#10A_out=4'd6;B_out=4'd6;
#10A_out=4'd8;B_out=4'd14;
#10A_out=4'd12;B_out=4'd12;
#20$finish;
end
initial
begin
$monitor($time,"A=%b,B=%b,A_gt_B=%d,A_it_B=%d,A_eq_B=%d",A_out,B_out,F1,F2,F3);
end
endmodule
激励块:
modulemagnitude_comparator(A,B,A_gt_B,A_it_B,A_eq_B);
input[3:
0]A,B;
outputA_gt_B,A_it_B,A_eq_B;
wire[3:
0]X;
assign
X[0]=(A[0]&B[0])|(~A[0]&~B[0]),
X[1]=(A[1]&B[1])|(~A[1]&~B[1]),
X[2]=(A[2]&B[2])|(~A[2]&~B[2]),
X[3]=(A[3]&B[3])|(~A[3]&~B[3]);
assign
A_gt_B=(A[3]&~B[3])|(X[3]&A[2]&~B[2])|(X[3]&X[2]&A[1]&~B[1])|(X[3]&X[2]&X[1]&A[0]&~B[0]),
A_it_B=(~A[3]&B[3])|(X[3]&~A[2]&B[2])|(X[3]&X[2]&~A[1]&B[1])|(X[3]&X[2]&X[1]&~A[0]&B[0]),
A_eq_B=X[3]&X[2]&X[1]&X[0];
endmodule
四、仿真结果及分析
实验题目:
使用JK触发器设计一个计数器
一、实验内容:
一个同步计数器可以使用主从JK触发器来设计。
设计一个同步计数器,其逻辑图和JK触发器的逻辑图如书中图所示。
清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出;当count_enable信号为低电平时停止计数。
写出同步计数器的Verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q[3:
0]。
二、技术规范:
本次试验中共有三个模块,分别是JK主从触发器设计模块,计数器设计模块及激励模块。
对于JK触发器,共有四个输入端(j,k,clear,clock),两个输出端(q,qbar),根据其实际电路结构做出相应的设计;对于计数器模块,有三个输入端(clear,clock,counter_clock),四个输出(Q[3:
0]),使用的是四个JK触发器和门电路组合,采用同步清零和同步脉冲构成四位同步计数器;激励模块中根据技术模块输入端口进行相关赋值以便进行仿真观察;
三、实验步骤:
1.在modulesim软件中使用数据流建模进行四位计数器设计及输入;
2.进行编译及仿真。
四、源代码:
JK触发器模块:
modulem_c_jkff(q,qbar,J,K,clear,clock);
outputq,qbar;
inputJ,K,clear,clock;
wirea,b,c,d,y,ybar,cbar;
assigncbar=~clock;
assign#1a=~(J&qbar&clock&clear),
b=~(K&q&clock),
y=~(a&ybar),
ybar=~(y&b&clear),
c=~(y&cbar),
d=~(ybar&cbar);
assign#1q=~(c&qbar);
assign#1qbar=~(d&clear&q);
endmodule
计数器模块:
modulefour_count_ff(Q,clear,clock,count_enable);
output[3:
0]Q;
inputclear,clock,count_enable;
wirea1,a2,a3;
assigna1=count_enable&Q[0],
a2=a1&Q[1],a3=a2&Q[2];
m_c_jkffm1(Q[0],,count_enable,count_enable,clear,clock);
m_c_jkffm2(Q[1],,a1,a1,clear,clock);
m_c_jkffm3(Q[2],,a2,a2,clear,clock);
m_c_jkffm4(Q[3],,a3,a3,clear,clock);
endmodule
激励模块:
modulestimulus;
regclock,clear,count_enable;
wire[3:
0]Q;
initial
$monitor($time,"CountQ=%bClear=%b",Q[3:
0],clear);
four_count_fff1(Q,clear,clock,count_enable);
initial
begin
clear=1'b0;
count_enable=1'b1;
#10clear=1'b1;
//#1count_enable=1'b1;
//#50clear=1'b0;
//#100count_enable=1'b0;
//#100clear=1'b0;
//#50clear=1'b1;
//#50count_enable=1'b1;
end
initial
begin
clock=1'b0;
forever#20clock=~clock;
end
initial
#1000$finish;
Endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- verilog实验报告 程超 verilog 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)