verilog实验.docx

上传人:b****5 文档编号:8237541 上传时间:2023-01-30 格式:DOCX 页数:16 大小:1.45MB
下载 相关 举报
verilog实验.docx_第1页
第1页 / 共16页
verilog实验.docx_第2页
第2页 / 共16页
verilog实验.docx_第3页
第3页 / 共16页
verilog实验.docx_第4页
第4页 / 共16页
verilog实验.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

verilog实验.docx

《verilog实验.docx》由会员分享,可在线阅读,更多相关《verilog实验.docx(16页珍藏版)》请在冰豆网上搜索。

verilog实验.docx

verilog实验

实验二:

组合逻辑电路设计

一、实验目的:

学习组合逻辑电路,学习译码器的功能与定义,学习Verilog语言。

二、实验内容:

编写3-8译码器的Verilog代码并仿真,编译下载验证。

三、实验环境

PC机(Pentium100以上)、AlteraQuartusII6.0CPLD/FPGA集成开发环境、AR1000核心板、SOPC-MBoard板、ByteBlasterII下载电缆。

四、实验原理

译码是编码的逆过程,它的功能是将特定含义的二进制码进行辨别,并转换成控制信号,具有译码功能的逻辑电路成为译码器。

译码器可分为两种类型,一种是将一系列代码转换成与之一一对应得有效信号。

这种译码器可以称为唯一地址译码器,它常用于计算机中对存储器单元地址的译码,即将每一个地址代码换成一个有效信号,从而选中对应的单元。

另一种是将一种代码转换成另一种代码,所以也称为代码变换器。

五、实验过程

1.代码

2.编译成功

3.波形simulation

4.仿真波形图

实验三:

时序逻辑电路设计

(一)

一、实验目的:

学习时序逻辑电路,学习计数器的原理,学习Verilog。

二、实验内容:

编写一个带预置输入,清零输入,可加/可减计数器的Verilog代码并仿真。

三、实验环境

PC机(Pentium100以上)、AlteraQuartusII6.0CPLD/FPGA集成开发环境。

四、实验原理

计数器是数字系统中用的较多的基本逻辑器件。

它不仅能记录输入时钟脉冲的个数,还可以实现分频、定时等功能。

计数器的种类很多。

按脉冲方式可以分为同步计数器和异步计数器;按进制可以分为二进制计数器和非二进制计数器;按计数过程数字的增减,可分为加计数器、减计数器和可逆计数器。

本实验就是设计一个4位二进制加减法计数器,该计数器可以通过一个控制信号决定计数器时加计数还是减计数,另外,该寄存器还有一个清零输入,低电平有效。

还有一个load装载数据的信号输入,用于预置数据;还有一个C的输出,用于计数器的级联。

其功能表如表3-1所示;管脚定义如图3-1所示。

R

CLK

load

up_down

状态

L

x

x

x

置零

H

x

L

x

置数

H

H

0

减法

H

H

1

加法

表3-14位二进制加减法计数器功能表

五,实验过程

1,代码

modulecounter4(load,clk,c,DOUT,clr,up_down,DIN);

inputload;

inputclk;

wireload;

inputclr;

inputup_down;

wireup_down;

input[3:

0]DIN;

wire[3:

0]DIN;

outputc;

regc;

output[3:

0]DOUT;

wire[3:

0]DOUT;

reg[3:

0]data_r;

assignDOUT=data_r;

always@(posedgeclkorposedgeclrorposedgeload)

begin

if(clr)

data_r<=0;

elseif(load)

data_r<=DIN;

elsebeginif(up_down)

begin

if(data_r==4'b1111)begin

data_r<=4'b0000;

c=1;

end

elsebegin

data_r<=data_r+1;

c=0;

end

end

else

begin

if(data_r==4'b0000)begin

data_r=4'b1111;

c=1;

end

elsebegin

data_r<=data_r-1;

c=0;

end

end

end

end

endmodule编译通过

仿真波形图

实验五:

通用移位寄存器的设计

一、实验目的:

学习时序逻辑电路,学习寄存器的原理,学习Verilog语言。

二、实验内容:

编写一个8位的模式可控的移位寄存器的Verilog代码并编译,仿真。

三、实验环境

PC机(Pentium100以上)、AlteraQuartusII6.0CPLD/FPGA集成开发环境。

四、实验原理

本实验就是设计一个模式可控的移位寄存器,该寄存器可以对8位信号通过MD输入端控制移位输出的模式,其功能表如表5-1所示。

CLK

MD

状态

001

带进位循环左移

010

带进位循环右移

011

自循环左移

100

自循环右移

101

加载待移数据

其他

保持

表5-1模式可控移位寄存器功能表

五、实验步骤

1、按照模式可控的移位寄存器的功能表编写Verilog代码。

moduleyinwei(clk,data_in,data_out,C0,MD,CN);

inputclk,C0;//时钟和进位输入

input[7:

0]data_in;//待加载移位的数据

input[2:

0]MD;//移位模式控制

output[7:

0]data_out;//移位数据输出

outputCN;//进位输出

reg[7:

0]REG;

regCY;

always@(posedgeclk)begin

case(MD)

3'b001:

beginREG[0]<=C0;REG[7:

1]<=REG[6:

0];CY<=REG[7];end//带进位循环左移

3'b010:

beginREG[7]<=C0;REG[6:

0]<=REG[7:

1];CY<=REG[0];end//带进位循环右移

3'b011:

beginREG[0]<=REG[7];REG[7:

1]<=REG[6:

0];end//自循环左移

3'b100:

beginREG[7]<=REG[0];REG[6:

0]<=REG[7:

1];end//自循环右移

3'b101:

beginREG<=data_in;end//加载待移数据

default:

beginREG<=REG;CY=CY;end//保持

endcaseend

assigndata_out=REG;//移位后输出

assignCN=CY;//移位后输出

 

endmodule

2、进行编译仿真,给出电路的时序逻辑波形。

实验六:

多层次设计

一、实验目的:

学习加法器的功能与定义,学习Verilog语言,学习用图形方法设计多层次结构的Verilog设计。

二、实验内容:

编写一个半减器和一个或门的Verilog代码,用图形的方法建立一个全加器并编译,仿真。

三、实验环境

PC机(Pentium100以上)、AlteraQuartusII6.0CPLD/FPGA集成开发环境。

四、实验原理

算术运算式数值系统的基本功能,更是计算机中不可缺少的组成单元。

1、半加器

半加法和全加法是算术运算电路中的基本单元,它们是完成1位二进制相加的一种组合逻辑电路。

一位加法器的真值表见下表;由表6-1中可以看见,这种加法没有考虑低位来的进位,所以称为半加。

半加器就是实现下表中逻辑关系的电路。

被加数A

加数B

和数S

进位C

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

表6-1一位半加器真值表

2、全加器

全加器能进行加数、被加数和低位来的进位信号相加,并根据求和结果给出该位的进位信号。

根据它的功能,全加器可由半加器和或门组成,其结构图如图6-1所示。

图6-1全加器结构

五、实验步骤

1、先建立一个工程,工程名为f_adder.v,在工程中建立两个Verilog文件,文

件名分别是h_adder.v和or_2a.v。

h_adder.v按半加器真值表进行编写,or_2a.v完成了或门的功能。

2、分别为h_adder.v和or_2a.v两个文件设置成可调用的元件,选择File|Creat/_update|CreatSymbolFilesforCurrentFile,

3、为工程建立顶层文件,选择File|New,新建文件,在对话框里选择BlockDiagram/SchematicFile,建立图形文件。

4、在图形文件里,双击鼠标左键,出现Symbol对话框。

选择Libraries|Project|h_adder添加h_adder元件。

5、用相同的方法添加or2a元件

6、在图形文件里,双击鼠标左键,出现Symbol对话框。

选择Libraries|d:

/altera/quartus60/libraries/|primirives|pin|input添加输入引脚。

7、用相同的方法添加需要的输出引脚。

8、按图6-1连接好个元件和引脚,然后分别在input和output引脚的PINNAME上双击使其变为黑色,按图6-1修改引脚名。

9、将此文件保存为与工程顶层文件名相同的名字f_adder.bdf做为此工程的顶层文件,并对此文件进行编译。

10、编译好后进行仿真,给出仿真波形,分析是否满足全加器的逻辑。

六、实验过程

1、代码

(1)半加器

moduleh_adder(A,B,SO,CO);

inputA,B;

outputSO,CO;

assignSO=A^B;

assignCO=A&B;

endmodule

(2)或门

moduleor2a(a,b,c);

inputa,b;

outputc;

assignc=a|b;

endmodule

2、图形文件

3、编译通过

4、仿真波形

实验十:

序列检测器的设计

一、实验目的:

了解序列检测器的工作原理,掌握Verilog语言状态机的设计方法。

二、实验内容:

用Verilog语言设计一个序列检测器,要求当检测器连续收到一组串行码(1110010)后,输出为1,其他情况输出为0,请通过QuartusII软件对其进行仿真。

三、实验环境

PC机(Pentium100以上)、AlteraQuartusII6.0CPLD/FPGA集成开发环境。

四、实验原理

序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。

由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。

在检测过程中,任何一位不相等都将回到初始状态重新开始检测。

五、实验步骤

1、首先打开QuartusII软件,新建一个工程,并新建一个VerilogHDLFile。

2、按照自己的想法,编写Verilog程序。

3、对自己编写的Verilog程序进行编译并仿真。

六、实验过程

1、代码

moduleSCHK(inputCLK,DIN,RST,outputSOUT);

parameters0=40,s1=41,s2=42,s3=43,

s4=44,s5=45,s6=46,s7=47;

reg[7:

0]ST,NST;

always@(posedgeCLKorposedgeRST)

if(RST)ST<=s0;elseST<=NST;

always@(STorDIN)begin//1110010串行输入,高位在前

case(ST)

s0:

if(DIN==1'b1)NST<=s1;elseNST<=s0;

s1:

if(DIN==1'b1)NST<=s2;elseNST<=s0;

s2:

if(DIN==1'b1)NST<=s3;elseNST<=s0;

s3:

if(DIN==1'b0)NST<=s4;elseNST<=s0;

s4:

if(DIN==1'b0)NST<=s5;elseNST<=s0;

s5:

if(DIN==1'b1)NST<=s6;elseNST<=s0;

s6:

if(DIN==1'b0)NST<=s7;elseNST<=s0;

s7:

if(DIN==1'b0)NST<=s3;elseNST<=s0;

default:

NST<=s0;

endcaseend

assignSOUT=(ST==s7);

endmodule

2、编译通过

3、仿真波形

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

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1