差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
step-mxo2 [2017/02/24 09:35] zhijun |
step-mxo2 [2017/02/24 15:24] (当前版本) zhijun |
||
---|---|---|---|
行 1: | 行 1: | ||
<WRAP center 60%> | <WRAP center 60%> | ||
- | ====== 实验二 基本组合逻辑电路 ====== | + | ====== 实验一 基本逻辑门 ====== |
</WRAP> | </WRAP> | ||
- | ===== 一、 实验简介 ===== | + | ===== 一、 实验目的 ===== |
- | 本教程以实验为主,结合相应的实验案例,以详细的讲解和实验步骤让大家尽快熟悉FPGA开发的基本流程、Lattice Diamond软件平台的使用方法以及本节实验相关模块的工作原理。 | + | * 熟悉和掌握FPGA开发流程和Lattice Diamond软件使用方法\\ |
- | 组合逻辑电路是数字电路的重要部分,电路的输出只与输入的当前状态相关的逻辑电路,常见的有选择器、比较器、译码器、编码器、编码转换等等。通过对组合逻辑电路实验的学习,掌握以下知识要点: | + | |
- | 熟悉和掌握FPGA开发的基本流程 | + | |
- | 掌握Lattice Diamond软件平台的基本使用方法 | + | |
- | 掌握常见组合逻辑电路的原理和设计方法 | + | |
- | 掌握使用Verilog HDL语言描述组合逻辑电路的方法 | + | |
- | ===== 二、 背景知识 ===== | + | * 通过实验理解基本门电路\\ |
- | 组合逻辑电路的特点是任一时刻的输出信号只和当时的输入信号有关。 | + | |
- | 时序电路种类很多,常见的有选择器、译码器、比较器、编码器等等,这里我们用Verilog HDL来描述几个典型的组合逻辑电路,通过实例的方式学习组合逻辑电路的Verilog HDL建模方法。 | + | |
- | 在用Verilog HDL描述组合电路时,可以在逻辑门级通过内置的逻辑门元件进行描述,也可以使用数据流描述语句和行为级描述语句进行描述。 | + | |
- | ===== 三、 实验环境===== | + | * 掌握用Verilog HDL数据流基本门电路的方法\\ |
- | 硬件环境:STEP FPGA 实验平台 | ||
- | 软件环境:Lattice Diamond 开发环境 | ||
- | |||
- | ===== 四、 实验部分===== | ||
- | ====4.1 2选1选择器==== | + | ===== 二、 实验任务 ===== |
- | \\ | + | |
- | ===4.1.1 实验目的=== | + | |
- | 1)熟悉和掌握FPGA开发流程和Lattice Diamond软件使用方法\\ | + | 利用Verilog语言实现不同的2输入基本逻辑门。\\ |
- | 2)通过实验理解和掌握选择器原理\\ | + | |
- | 3)掌握用Verilog HDL描述选择器的方法\\ | + | |
- | ===4.1.2 实验任务=== | ||
- | 本实验的任务是描述一个2选1的选择器逻辑单元。\\ | + | ===== 三、 实验原理===== |
- | + | ||
- | ===4.1.3 实验原理=== | + | |
- | + | ||
- | 真值表如下图所示: | + | |
+ | 与门,或门,与非门,或非门,异或门,同或门真值如下表所示:\\ | ||
+ | {{ :简单逻辑门真值表.jpg |}} | ||
+ | ===== 四、 Verilog HDL建模描述===== | ||
- | ===== 四、 代码设计 ===== | + | 程序清单 gates.v |
- | LED默认状态为点亮,若其他LED不加控制,则会常亮。以下代码目的为改变其默认状态,使之常灭:\\ | + | module gates |
- | <code verilog> | + | ( |
- | assign empty=8'b1111_1111; //led's defualt mode is lighted | + | //INPUT |
- | </code> | + | a , |
- | + | b , | |
- | 由于LED为低电平触发,若直接将z连接在LED管脚上,LED亮将代表输入为低电平,LED灭代表输入为高电平。所以有如下代码,使之更符合我们的思维习惯: | + | //OUTPUT |
- | <code verilog> | + | led , |
- | assign led=~z; //led is low active | + | empty |
- | </code> | + | ); |
- | 逻辑门电路的函数表达式如下所示:\\ | + | //******************* |
- | <code verilog> | + | //DEFINE INPUT |
- | assign z[5]=a&b; //AND | + | //******************* |
- | assign z[4]=~(a&b); //NAND | + | input a,b; |
- | assign z[3]=a|b; //OR | + | |
- | assign z[2]=~(a|b); //NOR | + | //******************* |
- | assign z[1]=a^b; //XOR | + | //DEFINE OUTPUT |
- | assign z[0]=a~^b; //XNOR | + | //******************* |
- | </code> | + | output [7:0] empty; |
+ | output [5:0] led; | ||
+ | |||
+ | wire [5:0] z; | ||
+ | |||
+ | //Combinational logic style | ||
+ | assign z[5]=a&b; //AND | ||
+ | assign z[4]=~(a&b); //NAND | ||
+ | assign z[3]=a|b; //OR | ||
+ | assign z[2]=~(a|b); //NOR | ||
+ | assign z[1]=a^b; //XOR | ||
+ | assign z[0]=a~^b; //XNOR | ||
+ | |||
+ | assign led=~z; //led is low active | ||
+ | |||
+ | assign empty=8'b1111_1111; //led's defualt mode is lighted | ||
+ | |||
+ | endmodule | ||
- | 原理图如下所示,其中“与非门”和“或非门”是将“与门”和“或门”取反所得 : | + | ===== 五、 实验步骤===== |
+ | \\ | ||
- | {{ :wiki:实验一简单逻辑门原理图.jpg?700 |原理图}} | + | === 1.新建工程 === |
+ | \\ | ||
+ | 双击{{:diamond图标.png?28|}}打开Lattice Diamond软件,点击**File—New—Project**新建工程,输入工程名称,指定工程保存目录,单击**Next**,选择设备如下:\\ | ||
+ | * **Family**选择**MachXO2**, | ||
+ | * **Device**选择**LCMXO2-4000HC**, | ||
+ | * **Performance grade**选择**4**, | ||
+ | * **Package type**选择**CSBGA132**, | ||
+ | * **Operating conditions**选择**Commercial**, | ||
+ | * **Part Names**为**LCMXO2-4000HC-4MG132C**。 | ||
+ | * 选择综合工具**Lattice LSE**,完成。\\ | ||
+ | === 2. 输入Verilog文件 === | ||
- | + | \\ | |
- | + | 点击**File—New—File**新建文件,类型选择**Verilog Files**,输入文件名称,选择保存路径,输入实验中的源代码后保存,编辑器会自动检查有无编辑错误,在下面的**Output**一栏会输出检查结果,如果有错误更正后重新保存直到没有报错为止。\\ | |
- | + | \\ | |
- | + | === 3. 输入仿真文件 === | |
- | + | \\ | |
- | + | 按照步骤**(2)**新建一个**Verilog**仿真文件,输入实验例程中仿真文件的代码后保存。在软件File List一栏中,右键单击“仿真文件”**—Include for—Simulation**,将文件设置为仿真文件(设置完成后文件图标的V会消失)。\\ | |
- | + | \\ | |
- | + | === 4. 功能仿真 === | |
- | + | \\ | |
- | ===== 五、 仿真波形 ===== | + | 点击**Tools**选择**Simulation Wizard**或点击图标,按照仿真向导指示新建仿真工程, |
- | a,b两项输入的真值表如第二部分所示,产生如下波形:\\ | + | * 输入工程名称,选择工程目录,选择**Simulator**为**Active-HDL**, |
- | {{:实验一仿真.jpg?600|仿真}} | + | * **Process Stage**选择**RTL**, |
- | + | * **Add and Reorder Source**:确认参与仿真的文件列表,**Next** | |
- | 如下图所示,开关SW1为0,SW2为1,对应波形图中z=010110。对应的LD2、LD4、LD5发光。此时,或非门、或门、与非门为真。\\ | + | * **Parse HDL files for simulation**:软件会编译仿真文件,若报错需修改后重新仿真 |
- | {{:实验一简单逻辑门实物图.jpg?500|实物图}} | + | * **Summary**:确认仿真工程信息,勾选**Run simulator**、**Add top-level signals to waveform display和Run simulation**,然后**Finish** |
- | + | 仿真软件会自动启动、运行仿真并显示仿真结果。查看仿真结果是否符合预期功能,如果不符合电路功能,则修改Verilog代码保存后,在**Active-HDL**中选择**Design—Compile All** 重新编译文件,编译通过后,在**Simulation**中重新开始仿真。 | |
- | ===== 六、 资源报告 ===== | + | \\ |
- | + | \\ | |
- | ^ 资源 | 数量 | 比例 | 说明 | | + | === 5. 综合 === |
- | ^ LUTs | 7 | 0% | | | + | \\ |
- | ^ 寄存器 | 0 | 0% | | | + | 在Lattice Diamond软件的**Process**一栏,双击第一项**Synthesize Design**进行综合(确保仿真文件设置为**simulation**后不参与综合),综合结果会在下面的**Output**一栏中给出,如果有错误则修改Verilog文件后重新综合直至综合成功为止。 |
- | ^ 存储器 | 0 | 0% | | | + | \\ |
- | ^ IO管脚 | 26 | 23% | | | + | \\ |
- | ^ 时钟频率 | 12MHz | | | | + | === 6. 分配管脚 === |
- | ===== 七、 源文件 ===== | + | \\ |
- | ^ **文件名称** | **功能** | | + | 打开**Tools—Spreadsheet View**或是点击图标{{::分配管脚.png|}}在**Port Assignments**一栏中对输入输出信号分配引脚。 |
- | ^ **[[gates.v]]** | **逻辑门** | | + | \\ |
- | ^ **[[gates_tb.v]]** | **测试文件** | | + | \\ |
+ | === 7. 布局布线 === | ||
+ | \\ | ||
+ | 双击**Process**一栏的**Map Design**和**Place & Route Design**完成**FPGA**内部的布局布线。 | ||
+ | \\ | ||
+ | \\ | ||
+ | === 8. 生成配置文件 === | ||
+ | \\ | ||
+ | 勾选并双击**JEDEC File**生成可下载的**jed**文件。 | ||
+ | \\ | ||
+ | \\ | ||
+ | === 9. 下载 === | ||
+ | \\ | ||
+ | 打开**Tools—Programmer**或单击图标,根据下图选择设备和下载文件,点击上面的绿色按钮**Program**,下载**jed**文件到FPGA,下载成功后**Status**状态显示**PASS**(下载前确保下载器驱动成功安装)。 | ||
+ | {{:下载成功.png|}} | ||
+ | 观察开发板现象。 | ||