verilog实验报告程超Word文档格式.docx

上传人:b****6 文档编号:8513227 上传时间:2023-05-11 格式:DOCX 页数:11 大小:83.09KB
下载 相关 举报
verilog实验报告程超Word文档格式.docx_第1页
第1页 / 共11页
verilog实验报告程超Word文档格式.docx_第2页
第2页 / 共11页
verilog实验报告程超Word文档格式.docx_第3页
第3页 / 共11页
verilog实验报告程超Word文档格式.docx_第4页
第4页 / 共11页
verilog实验报告程超Word文档格式.docx_第5页
第5页 / 共11页
verilog实验报告程超Word文档格式.docx_第6页
第6页 / 共11页
verilog实验报告程超Word文档格式.docx_第7页
第7页 / 共11页
verilog实验报告程超Word文档格式.docx_第8页
第8页 / 共11页
verilog实验报告程超Word文档格式.docx_第9页
第9页 / 共11页
verilog实验报告程超Word文档格式.docx_第10页
第10页 / 共11页
verilog实验报告程超Word文档格式.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

verilog实验报告程超Word文档格式.docx

《verilog实验报告程超Word文档格式.docx》由会员分享,可在线阅读,更多相关《verilog实验报告程超Word文档格式.docx(11页珍藏版)》请在冰点文库上搜索。

verilog实验报告程超Word文档格式.docx

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;

wired;

D_FFdff0(q,d,clk,reset);

notn1(d,q);

//非门(not)是Verilog语言的内置原语部件(primitive)

//D触发器(D_FF)

//带异步复位的D触发器(D_FF)

moduleD_FF(q,d,clk,reset);

inputd,clk,reset;

regq;

//可以有许多种新结构,不考虑这些结构的功能,只需要注意设计块是如何以自顶向下的方式编写的

always@(posedgeresetornegedgeclk)

if(reset)

q<

=1'

b0;

else

=d;

modulestimulus;

regclk;

regreset;

wire[3:

//引用已经设计好的模块实例

ripple_carry_counterr1(q,clk,reset);

//控制驱动设计块的时钟信号,时钟周期为10个时间单位

initial

clk=1'

//把clk设置为0

always

#5clk=~clk;

//每5个时间单位时钟翻转一次

//控制驱动设计块的reset信号

begin

reset=1'

b1;

#15reset=1'

#180reset=1'

#10reset=1'

#20$finish;

//终止仿真

end

//监视输出

$monitor($time,"

Outputq=%d"

q);

五、仿真结果及分析

仿真输出结果:

实验题目RS锁存器

带有延迟的RS锁存器,写出其带有延迟的Verilog门级描述。

编写其激励模块,根据下面的输入-输出关系表对其功能进行验证。

set

reset

Qn+1

Qn

1

?

在设计完成后,写出激励模块对其进行仿真。

reset,set;

q,qbar,out。

这是具有延迟的RS锁存器。

Reset为置位端,set为置零端。

RS锁存器

1.设计模块:

moduleSR_lach(q,qbar,reset,set);

outputq,qbar;

inputreset,set;

nand#1(q,reset,qbar);

nand#1(qbar,set,q);

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

实验题目:

两个四位二进制的比较器

大小比较器的功能是比较两个数之间的关系:

大于、小于或等于。

一个四位大小比较器的输入是两个四位数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的几种组合,对模块的功能进行测试。

二、实验步骤

三、源代码:

reg[3:

0]A_out,B_out;

wireF1,F2,F3;

magnitude_comparatorsti(A_out,B_out,F1,F2,F3);

#0A_out=4'

d0;

B_out=4'

d1;

#10A_out=4'

d2;

d5;

d15;

d10;

d3;

d6;

d8;

d14;

d12;

#20$finish;

A=%b,B=%b,A_gt_B=%d,A_it_B=%d,A_eq_B=%d"

A_out,B_out,F1,F2,F3);

激励块:

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;

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]);

A_gt_B=(A[3]&

~B[3])|(X[3]&

A[2]&

~B[2])|(X[3]&

X[2]&

A[1]&

~B[1])|(X[3]&

X[1]&

A[0]&

A_it_B=(~A[3]&

B[3])|(X[3]&

~A[2]&

B[2])|(X[3]&

~A[1]&

B[1])|(X[3]&

~A[0]&

B[0]),

A_eq_B=X[3]&

X[0];

四、仿真结果及分析

实验题目:

使用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&

c=~(y&

cbar),

d=~(ybar&

cbar);

assign#1q=~(c&

qbar);

assign#1qbar=~(d&

clear&

q);

计数器模块:

modulefour_count_ff(Q,clear,clock,count_enable);

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);

激励模块:

regclock,clear,count_enable;

wire[3:

CountQ=%bClear=%b"

Q[3:

0],clear);

four_count_fff1(Q,clear,clock,count_enable);

clear=1'

count_enable=1'

#10clear=1'

//#1count_enable=1'

//#50clear=1'

//#100count_enable=1'

//#100clear=1'

//#50count_enable=1'

clock=1'

forever#20clock=~clock;

#1000$finish;

Endmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2