数字电路与Verilog设计期末实验

采用for循环定义的2-4二进制译码器

1、实验目的
例4.18图4.37展示了如何用for循环详细定义一个2-4的译码器电路。循环的作用就是对于k=0, …3重复执行if-else语句4次。如果W≈0及En=1,第一次循环迭代令y=1。类似地,其他3个迭代根据W和En的值确定y1、Y2及,Y3的值。
根据需要增加矢量W和Y的大小,并且令k的终值为n-1(即k=n-1),就可定义一个大型的n到2”的译码器。
2、实验代码
在这里插入图片描述
3、实验代码
module dec2to4(W,En,Y);
input [1:0]W;
input En;
output reg [0:3]Y;
integer k;
always @(W,En)
for(k=0;k<=3;k=k+1)
if((Wk)&&(En1))
Y[k]=1;
else
Y[k]=0;
endmodule

4、测试代码
`timescale 1 ps/ 1 ps
module tb_dec2to4();
reg [1:0]x;
reg en;
wire y;

dec2to4 my_dec2to4(.W(x),.En(en),.Y(y));

initial
begin
x=2’b00;
#10 x=2’b01;
#10 x=2’b10;
#10 x=2’b11;
#20 $stop;
end
initial
en=0;
always #5 en = ~en;

endmodule
5、实验步骤(截图)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实验视频

116

实验四第二次博客记录Verilog(第二版)数字系统设计与仿真十一章实验4任务与函数的设计

一,实验目的:
(1)掌握任务的设计和调用方法
(2)掌握函数的 设计和调用方法
(3)进一步熟悉和掌握行为级语法
二,实验涉及语法
(1)第五章中任务的定义方法和调用方法
(2)第五章中函数的定义方法和调用方法
(3)第四章中行为级语法中部分语句
三,实验内容:参照书上的代码完成一个算术逻辑单元的建模和任务建模。
在编写测试模块时,为了使输出的结果更利于观察,把select信号设置为依次加1的操作这样连续的8个信号变化就会完成所有应该执行的功能,保证所有的case分支都能执行。而a和b的值采用两个不同的随机数产生,使数据具有一般性。输出端口中result_f表示函数的输出,result_t表示任务的输出
在这里插入图片描述

先采用函数的方式来完成设计,定义送入计算的a和b数据是4位值,计算的结果也保留4位值,按照如下的方式来声明此函数形式。
在这里插入图片描述

若要使用任务来完成这个算术逻辑单元,需使用如下代码:
在这里插入图片描述

完成了上述两个代码,可以编写测试平台代码如:
在这里插入图片描述
在这里插入图片描述

根据给出的功能表,结合函数的基本语法,可以得到如下参考代码,该函数的返回值
是4位的,所以在函数声明时一定要声明为[3:0]形式。由于默认的数据类型就是reg型,所以不需要再显示定义为reg型返回值。在这里插入图片描述

case语句和if语句是可以嵌套使用的,虽然–些简单的仿真器对这种语法支持不够,但绝大多数正常版本的仿真器都可以支持此类语法,在case语句中使用if来判断状态的变化情况也是状态机写法中的标准形式。

该任务代码部分与函数的功能部分基本相同,只是在定义和输入/输出信号的声明上略有区别。完成了上述两个代码,补全测试平台,参考代码如下,注意函数在调用的时候一-定要有一个赋值等式,同时不需要输出信号部分:任务在调用时不能使用赋值等式,只是直接写出任务名并排列好任务所需的输入和输出信号即可,相关内容请复习第5章的知识。
在这里插入图片描述

运行该测试模块可以得到图11-31所示的波形图。
在这里插入图片描述

四,实验工具:modelsim软件
五、实验代码
设计模块代码
Majority
module Majority #(parameter size=8,max=3,majority=5)(
input [size-1:0] Data,
output reg Y
);
reg [max-1:0] count;
integer k;
always@(Data)begin
count=0;
for(k=0;k<size;k=k+1)begin
if(Data[k]==1)count=count+1;
end
Y=(count>=majority);
end
endmodule

测试模块代码
tb_Majority
`timescale 1 ps/ 1 ps
Majority module tb_Majority();
reg [7:0] data;
wire y;
i1 (.Data(data),.Y(y));
initial
begin
data[7:0]=8’b00000000;
#5 data[7:0]=8’b11010011;
#5 data[7:0]=8’b11010100;
#5 data[7:0]=8’b11010101;
#5 data[7:0]=8’b11010110;
#5 data[7:0]=8’b11010111;
#5 data[7:0]=8’b11011000;
#5 data[7:0]=8’b11011001;
#5 data[7:0]=8’b11011010;
#5 data[7:0]=8’b11011011;
#5 data[7:0]=8’b11011100;
#5 data[7:0]=8’b11011101;
#5 data[7:0]=8’b11011110;
#5 data[7:0]=8’b11011111;
#5 data[7:0]=8’b11100000;
#20 $stop;
end
endmodule

六、工程的建立: 打开Modelsim,并在project中创建一个工程,对其进行命名为444.
在这里插入图片描述

代码文件夹的创建:对于本实验我们设计了一个测试代码和实验代码,故而我们要创建两个create new file文件,并将Add file as type改为Verilog形式
在这里插入图片描述

放入实验代码:实验的本体在于实验代码,实验的第三步是将我们的代码写入已经创建的文件之中
在这里插入图片描述

实验代码的检测:将实验代码保存后点击Compile all的图标,或者右击Compile.在其中选择Compile all对实验的代码进行检测是否有错误。

实验仿真过程:在实验代码检测成功无误以后,我们点击simulate进行仿真
在这里插入图片描述

过程文件添加以及选择:
(1)点击Optimzation options…,再点击Customized visibility,add我们所要的work中的tb_Majority文件,对work工程在进行选择tb_Majority。
在这里插入图片描述

添加波形图
在这里插入图片描述

点击run all.得到实验的波形图

在这里插入图片描述
实验视频

实验四

第三次博客记录Verilog HDL高级数字设计(第二版)p80页例题4.8

一,实验目的:采用单位延时模型显示信号动作的时间顺序
二,实验原理图:
在这里插入图片描述

三,实验工具:modelsim软件。
四、实验代码
Add_full_unit_delay

`timescale 1 ps/ 1 ps
module Add_full_unit_delay(output c_out,sum,input a,b,c_in);
wire w1,w2,w3;
Add_half_unit_delay M1(w2,w1,a,b);
Add_half_unit_delay M2(w3,sum,w1,c_in);
or #1 M3(c_out,w2,w3);
endmodule

Add_half_unit_delay
`timescale 1 ps/ 1 ps
module Add_half_unit_delay (output c_out,sum,input a,b);
xor #1 M1(sum,a,b);
and #1 M2(c_out,a,b);
endmodule

tb_fulladd

`timescale 1 ps/ 1 ps
module tb_Add_full_unit_delay();
reg a, b, c_in;
wire sum, c_out;

Add_full_unit_delay fulladd(.c_out(c_out),.sum(sum),.a(a),.b(b),.c_in(c_in));

initial
begin
a=1’b0;b=1’b0;c_in=1’b0;
#5 a=1’b0;b=1’b0;c_in=1’b0;
#5 a=1’b0;b=1’b1;c_in=1’b0;
#5 a=1’b1;b=1’b1;c_in=1’b0;
#5 a=1’b1;b=1’b0;c_in=1’b0;
#5 a=1’b0;b=1’b0;c_in=1’b1;
#5 a=1’b0;b=1’b1;c_in=1’b1;
#5 a=1’b1;b=1’b1;c_in=1’b1;
#5 a=1’b1;b=1’b0;c_in=1’b1;
#20 $stop;
end

endmodule

实验截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实验视频

y4.8

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Verilog HDL的期末复习资料有很多, 以下是一些常见的资源: 1. Verilog HDL教程: 可以在线搜索或在图书馆借阅, 这是一个很好的入门资源。 2. Verilog HDL课件和讲义: 如果你已经上过Verilog HDL课程, 那么你可以回顾课件和讲义以加深对课程内容的理解。 3. Verilog HDL习题和练习: 可以通过做习题和练习来检验自己对Verilog HDL的掌握程度。 4. Verilog HDL论坛和博客: 可以在论坛和博客上提问和寻求帮助, 这是一个很好的交流平台。 希望这些资源能帮助你复习Verilog HDL课程。 ### 回答2: Verilog HDL是一种硬件描述语言,用于描述数字系统的行为和结构。它广泛应用于集成电路设计和验证领域。下面是一些Verilog HDL期末复习的资料。 首先是基本语法和结构。Verilog HDL包含模块、端口、数据类型、运算符、赋值语句等等。复习资料可以包括基本语法规则、模块的声明和实例化、端口声明和连接等内容。 其次是模块的行为描述。复习资料可以包括时序和组合逻辑设计、always块的用法、过程块和非阻塞赋值的区别、条件语句和循环语句的应用等等。 接着是模块的结构描述。复习资料可以包括选择结构、多位选择结构、case语句、模块的层次性等内容。 然后是测试和调试。复习资料可以包括仿真模型的生成、测试向量的编写、仿真的执行和结果分析、debug调试的方法等等。 此外,还可以包括其他相关的知识点,比如Verilog HDL的编码规范、常见的设计模式、代码复用技巧、仿真和综合工具的使用等。 在复习过程中,可以结合一些练习题和实例进行巩固。通过自己动手实践,提升对Verilog HDL的理解和运用能力。 总之,准备Verilog HDL期末考试可以通过系统地复习基本语法和结构、模块的行为和结构描述、测试和调试等内容。同时,结合实际练习和实例分析,加深对Verilog HDL的理解和应用。希望这些复习资料对您有所帮助。 ### 回答3: Verilog HDL,全称为硬件描述语言(Hardware Description Language),是一种用于设计和描述数字电路的语言。在学习和掌握Verilog HDL之前,我们需要准备一些期末复习资料,以便更好地掌握和理解该语言的核心概念和用法。 首先,了解基本的Verilog HDL概念和语法是非常重要的。复习资料中应包括Verilog HDL的语法规则、数据类型、运算符、控制结构等内容。这些基本知识将帮助我们正确书写Verilog代码并理解其含义。 其次,了解模块化设计思想和层次结构是很重要的。Verilog HDL支持模块化设计,可以将数字系统划分为多个模块,每个模块负责实现特定功能。复习资料应包括模块的定义和调用方法,以及顶层设计和子模块之间的连接和通信方式。 另外,复习资料还应涵盖时序和组合逻辑设计方面的内容。在时序设计中,我们需要了解时钟、寄存器、时序逻辑等概念,以及如何使用时钟边沿触发器进行同步设计。而在组合逻辑设计中,我们需要掌握逻辑门、布尔代数、多路选择器等知识,并能够将其应用到Verilog代码中。 此外,复习资料还可以包括一些案例分析和实践题目。通过解析一些实际应用场景的Verilog代码,我们可以更好地理解Verilog HDL的应用和实际设计过程。 最后,复习过程中还应多做一些练习题和实验。通过实践,我们可以更好地理解Verilog HDL的使用方法,并熟练掌握其应用技巧。 总而言之,复习资料应涵盖Verilog HDL的基本概念和语法、模块化设计思想、时序和组合逻辑设计、案例分析和实践题目等内容。通过充分的复习和实践,我们可以更好地掌握Verilog HDL,并在期末考试中取得好成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值