verilog实验.docx
《verilog实验.docx》由会员分享,可在线阅读,更多相关《verilog实验.docx(16页珍藏版)》请在冰豆网上搜索。
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、仿真波形