数电实验4Word文件下载.docx
《数电实验4Word文件下载.docx》由会员分享,可在线阅读,更多相关《数电实验4Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
4.2有限状态机三要素
1.状态(当前状态,下一个状态)
2.输入信号(事件)
3.输出控制信号(相应操作)
4.3有限状态机的两种形式
1.Moore有限状态机
2.Mealy有限状态机
4.4状态机的实现方式:
1.一段式:
整个状态机写到一个always模块里面,在该模块中既描述状态转移,又描述状态的输入和输出。
2.两段式:
写为两个always语句,同步时序描述状态转移;
另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出;
即把时序部分(状态转移部分)和组合部分(判断状态转移条件和产生输出)分开写。
3.三段式:
在两段式基础上,将组合部分中的判断状态转移条件和产生输出再分开写。
即一个always模块采用同步时序描述状态转移,一个always模块采用组合逻辑判断状态转移条件,描述状态转移规律,另一个always模块描述状态的输出(可以用组合电路输出,也可以时序电路输出)。
五、实验原理
5.1可编程器件开发流程
Xilinx是全球领先的可编程逻辑完整解决方案的供应商,研发、制造并销售应用范围广泛的高级集成电路、软件设计工具以及定义系统级功能的IP(IntellectualProperty)核,长期以来一直推动着FPGA技术的发展。
Xilinx的开发工具也在不断地升级,目前的ISEProjectNavigator13.x集成了FPGA开发需要的所有功能,其主要特点有:
•包含了Xilinx新型SmartCompile技术,可以将实现时间缩减2.5倍,能在最短的时间内提供最高的性能,提供了一个功能强大的设计收敛环境;
•全面支持Virtex-5系列器件(业界首款65nmFPGA);
•集成式的时序收敛环境有助于快速、轻松地识别FPGA设计的瓶颈;
•可以节省一个或多个速度等级的成本,并可在逻辑设计中实现最低的总成本。
ISEProjectNavigator13.x的主要功能包括设计输入、综合、仿真、实现和下载,涵盖了FPGA开发的全过程,从功能上讲,其工作流程无需借助任何第三方EDA软件。
•设计输入:
ISE提供的设计输入工具包括用于HDL代码输入和查看报告的ISE文本编辑器(TheISETextEditor),用于原理图编辑的工具ECS(TheEngineeringCapture
System),用于生成IPCore的CoreGenerator,用于状态机设计的StateCAD以及用于约
束文件编辑的ConstraintEditor等。
•综合:
ISE的综合工具不但包含了Xilinx自身提供的综合工具XST,同时还可以内嵌
MentorGraphics公司的LeonardoSpectrum和Synplicity公司的Synplify,实现无缝链接。
•仿真:
ISE本身自带了一个具有图形化波形编辑功能的仿真工具HDLBencher,同
时又提供了使用ModelTech公司的Modelsim进行仿真的接口。
•实现:
此功能包括了翻译、映射、布局布线等,还具备时序分析、管脚指定以及增
量设计等高级功能。
•下载:
下载功能包括了BitGen,用于将布局布线后的设计文件转换为位流文件,还
包括了ImPACT,功能是进行设备配置和通信,控制将程序烧写到FPGA芯片中去。
•使用ISE进行FPGA设计的各个过程可能涉及到的设计工具如表4-2所示。
•可方便使用PlanAhead协助添加管脚定义与约束
5.2BASYS2实验板介绍
Basys2FPGA开发板是一个面向初学者的FPGA开发实验平台,由Digilent公司出品。
Basys2FPGA实验开发板基于一个Spartan-3EFPGA芯片和一个AtmelAT90USB控制器搭建,兼容所有版本的XilinxISE工具,其中也包括免费的WebPack版本,适合于进行从基本逻辑器件到复杂控制器件等各种机电路的实验与开发尝试。
Basys2板上集成了必要的I/O设备和FPGA所需的支持电路,如8个用户可编程LED指示灯,4个七段数码管显示器,4个按键开关,8个滑动开关,1个PS/2接口和1个8位VGA显示接口以及4个6针PMOD用户扩展接口。
用户可利用PMOD用户扩展接口连接到诸如面包板、用户自定义电路板或由Digilent公司提供的各种Pmod模块中以实现用户的创意与构想。
Digilent公司目前提供的Pmod模块包括各种高性价比的数字和模拟I/O模块,如A/D和D/A转换,电机驱动器,传感器输入,蓝牙、网络与无线通信等。
Basys2开发板兼容所有版本的XilinxISE工具,其中也包括免费的WebPack版本。
Basys2附带一个用于供电和编程的USB下载线,所以就不需要其他供电器件或编程下载线。
其技术特点为:
XilinxSpartan3EFPGA,10万或25万门
XilinxSpartan3E特有18位乘法器,72位高速双端口BlockRAM,以及500MHz+运算能力
USB2.0高速接口提供FPGA配置和数据传输(相关Adept2.0软件可以免费下载)
XilinxPlatformFlashROM可以无限次存储FPGA配置
用户可配置晶振(25,50,100MHz),另附可连接第二个时钟晶振的插座
三个内置稳压器(1.2V,2.5V,和3.3V),允许使用3.5V-5.5V的外部电源供电
8个用户可编程LED指示灯,4个七段数码管显示器,4个按键开关,8个滑动开关,1个PS/2接口和1个8位VGA显示接口
4个6针用户扩展接口,可以用来连接DigilentPMOD附属电路板
需要Adept2.0或更新版本软件来进行操作
管脚定义参见下表:
用户可根据以上定义决定自己的时钟及IO管脚分配方式(参见4.3.4)我们将用户常用到的管脚定义摘抄出来,以供用户参考。
表5.2.1Basys2各IO管脚定义
发光二极管
时钟
拨码
开关
按键
数码管
LD0
M5
MCLK
B8
SW0
P11
BTN0
G12
AN0
F12
LD1
M11
RCCLK
C8
SW1
L3
BTN1
C11
AN1
J12
LD2
P7
CCLK
N12
SW2
K3
BTN2
M4
AN2
M13
LD3
P6
UCLK
M6
SW3
B4
BTN3
A7
AN3
K14
LD4
N5
SW4
G3
CA
L14
LD5
N4
SW5
F3
CB
H12
LD6
P4
SW6
E2
CC
N14
LD7
G1
SW7
N3
CD
N11
CE
P12
CF
L13
CG
M12
DP
N13
5.3使用XilinxISE13.1软件开发可编程器件的流程介绍
5.3.1新建工程
(1)开启ISE13.1软件:
开始程序XilinxISEDesignSuite13.1ISEProjectNavigator,会出现ISE13.1的画面.
(2)在ISE13.1软件环境下,开启一个新的工程:
FileNewProject.
[ProjectName]:
lab1_4bitsLEDs
[ProjectLocation]:
E:
\Training\training_demo\Verilog\lab1_4bitsLEDs(依使用者设定的目录).
[Top-LevelModuleType]:
HDL(代表最上层的设计模块是以HDL输方方式的模组.
(3)单击next,下一个画面就是设定硬件FPGA的参数
[FPGA系列(DeviceFamily)]:
Spartan3E(请看板子的FPGAFPGA的编号)
[FPGA名称(Device)]:
XC3S100E(请参考开发板的FPGAFPGA的编号)
[FPGA包装(Package)]:
CP132(请参考开发板的FPGAFPGA的编号)
[FPGA速度等级(Speed)]:
-4(FPGA速度等级)
[综合工具(SynthesisTool)]:
XST(VHDL/Verilog)
[仿真器(Simulator)]:
Isim(VHDL/Verilog)
[产生仿真器的语言(GeneratedSimulationLanguage)]:
Verilog
(4)点击next.此时出现此项目所有设定的信息,若需重新设定,则可back.若无误,则按finish
5.3.2创建新的Verilog源文件
5.3.2.1创建一个新的Verilog源文件
(1)此时出现一个项目的架构,可以允许使用者开始进行项目的设计.
(2)创建新的设计文件:
ProjectNewSource;
选择VerilogModule,并设定文件名称为work4.
(3)在创建好的work4代码当中输入如下代码,并做出了详细的注释。
moduleautocount(aclr,func,CLK_50M,left,right,CR);
inputaclr,CLK_50M,CR;
//功能异步清零aclr,时钟信号CLK_50M,功能清零CR
input[2:
0]func;
//功能信号func
outputreg[2:
0]left;
//输出信号汽车左车灯
0]right;
//输出信号汽车右车灯
reg[24:
0]Count_DIV;
//内部节点
parameterCLK_Freq=50000000;
//定义参数
parameterOUT_Freq=1;
regCLK_1HzOut;
always@(posedgeCLK_50MornegedgeCR)//运用always语句且()存在时钟沿时,内部的变量一般是非阻塞的
begin
if(!
CR)begin//如果有时钟清零信号,计数变量清零,1Hz时钟信号清零
CLK_1HzOut<
=0;
Count_DIV<
end
elsebegin
if(Count_DIV<
(CLK_Freq/2*OUT_Freq-1))//当计数变量小于24999999时,计数变量自增
Count_DIV<
=Count_DIV+1'
b1;
elsebegin//当计数变量到达25000000时
CLK_1HzOut<
=~CLK_1HzOut;
end
always@(posedgeCLK_1HzOutorposedgeaclr)
begin
if(aclr)
begin
//q<
=4'
b0000;
left<
=3'
b000;
right<
else
case(func)
3'
b000:
//正常行驶
begin
left<
right<
end
3'
b001:
//刹车
b111;
b100:
//左转弯
right<
if(left==3'
b000)
begin
left<
=left+1;
//Countsdown
end
elseif(left==3'
b001)
begin
b010)
=left+2;
b100)
=left-3;
else
left<
b001;
b010:
//右转弯
if(right==3'
right<
=right+1;
elseif(right==3'
=right+2;
=right-3;
b101:
//左转弯并刹车
end
b011:
//右转弯并刹车
if(right==3'
end
b111:
//倒车
if((right==3'
b111)&
&
(left==3'
b111))
right<
left<
elseif((right==3'
b000)&
b000))
else
default:
end
endcase
end//对于else
endmodule
4.3.2.2创建一个新的Verilog测试文件
(1)创建新的设计文件:
选择VerilogTestFixture,并设定文件名称为test4.
(2)在创建好的test4代码当中输入如下代码,并做了的注释。
moduletest4;
//Inputs
regaclr;
reg[2:
regCLK_50M;
regCR;
//Outputs
wire[2:
0]left;
0]right;
//InstantiatetheUnitUnderTest(UUT)
autocountuut(
.aclr(aclr),
.func(func),
.CLK_50M(CLK_50M),
.left(left),
.right(right),
.CR(CR)
);
alwaysbegin
#10;
CLK_50M=~CLK_50M;
initialbegin
//InitializeInputs
aclr=1;
func=0;
CLK_50M=0;
CR=0;
//Wait100nsforglobalresettofinish
#1;
aclr=0;
//正常行驶
func=3'
CR=1;
#10000;
b100;
//右转弯
b010;
b101;
//右转弯并刹车
b011;
//Wait100nsforglobal