差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
step-mxo2 [2016/09/20 17:07]
zhijun [三、硬件连接]
step-mxo2 [2017/02/24 15:24] (当前版本)
zhijun
行 1: 行 1:
 <WRAP center ​ 60%> <WRAP center ​ 60%>
-====== 实验一 2输入逻辑门电路 ​======+====== 实验一 基本逻辑门 ======
 </​WRAP>​ </​WRAP>​
  
  
-===== 一、 实验要求 ​=====+===== 一、 实验目的 ​=====   ​
  
-  ​- 所有的数字系统都由一些基本的数字电路,也就是逻辑门构成。对于所有可能的逻辑输入,真值表对应了其逻辑输出。通过三种基本的逻辑门,了解其他常逻辑门;\\ +  ​* 熟悉和掌握FPGA开发流程和Lattice Diamond软件使方法\\
-  - 完成电路设计并得到仿真波形。+
  
-===== 二、 实验与内容 ===== +  * 通过实验理解基本电路\\
-,或门,与非门,或非门,异或门,同或门真值如下表所示:\\ +
-{{ :简单逻辑门真值表.jpg?​800 |真值表}}+
  
-===== 三、 硬件连接 =====+  * 掌握用Verilog HDL数据流基本门电路的方法\\
  
-LED也叫发光二极管,可以把电能转化成光能,因为是二极管的一种,由一个PN结组成,具有单向导电性。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过二极管的电流,LED的亮度与电流有关,一般LED能够承受的最大电流为20mA(具体需要看使用的LED的参数),本设计使用的限流电阻为1K。下图为LED的硬件电路:\\ 
-{{ :​实验一简单逻辑门ld.jpg?​400 |LD}} 
-  
-本实验中我们需由LD1,​LD2,​LD3,​LD4,​LD5,​LD6的状态表示输出的结果,由上图可知当控制信号LED1端为高电平时D1熄灭,当控制信号LED1端为低电平时LD1点亮。 
-LED与FPGA的引脚连接关系如下: 
-|LD1:​管脚N13 | LD2:​管脚M12 | LD3:​管脚P12 |  
-|LD4:​管脚M11 | LD5:​管脚P11 | LD6:​管脚N10 | 
-  
-本实验所用开关原理图如下: 
-{{ :​实验一简单逻辑门sw.jpg?​600 |SW}} 
-  
-由上图可知,开关导通状态处于高电平。 
-LED与FPGA的引脚连接关系如下: 
-|SW1:​管脚M7 | SW2:​管脚M8 | SW3:​管脚M9 | SW4:​管脚M10 | 
  
-小脚丫仿真原理:开关SW1,​SW2处于四种不同状态,代表两个输入信号的4种不同取值情况,LED1~LED6,​分别代表6个逻辑门的输出情况。+===== 二、 实验任务 =====
  
-管脚分配如下:\\ +利用Verilog语言现不同的2输入基本逻辑门。\\
-{{ :验一简单逻辑们管脚.jpg?​500 |管脚}}+
  
  
- +===== 三、 实验原理=====
  
-===== 四、 代码设计 ===== +与门或门与非门,或非门,异或门,同或门真值如表所示:\\ 
- +{{ :​简单逻辑门真值表.jpg |}}
-LED默认状态为点亮若其他LED不加控制则会常亮。以代码目的为改变其默认状态,使之常灭:\\ +
-<code verilog>​ +
-assign ​ empty=8'​b1111_1111;​ //​led'​s defualt mode is lighted  +
-</​code>​+
    
-由于LED为低电平触发,若直接将z连接在LED管脚上,LED亮将代表输入为低电平,LED灭代表输入为高电平。所以有如下代码,使之更符合我们的思维习惯: +===== 四、 Verilog HDL建模描述=====
-<code verilog>​ +
-assign led=~z;        //led is low active +
-</​code>​  +
-逻辑门电路的函数表达式如下所示:\\ +
-<code verilog>​ +
-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 +
-</​code>​+
  
-原理图如下所示,其中“与非门”和“或非门”是将“与门”和“或门”取反所得 :+程序清单 gates.v
  
-{{ :wiki:实验一简单逻辑门原理图.jpg?​700 ​|原理图}}+  module gates 
 +  ( 
 +      //INPUT 
 +      a           , 
 +      b           , 
 +      //OUTPUT 
 +      led         , 
 +      empty 
 +  ); 
 +      //​******************* 
 +      //DEFINE INPUT 
 +      //​******************* 
 +      input   ​a,​b; ​     
 +     
 +      //​******************* 
 +      //DEFINE OUTPUT 
 +      //​******************* 
 +      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 ​    
  
 +===== 五、 实验步骤=====
 +\\
  
 +=== 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功能仿真 ​=== 
-a,​b两项输入的真值表如第二部分所示,产生如下波形:\\ +\\ 
-{{:实验一仿真.jpg?600|仿真}} +点击**Tools**选择**Simulation Wizard**或点击标,按照仿真向导指新建仿真工程 
-  +  * 输入工程名称,选择工程目录选择**Simulator****Active-HDL** 
-如下示,开关SW1为0SW21对应波形图中z=010110。对应LD2LD4LD5发光此时或非门、或门、非门。\\ +  * **Process Stage**选择**RTL**, 
-{{:实验一简单逻辑门实物图.jpg?500|实物图}} +  * **Add and Reorder Source**:确认参与仿真文件列表,**Next** 
- +  * **Parse HDL files for simulation**:软件会编译仿真文件,若报错需修改后重新仿真 
-===== 六、 资源报告 ===== +  * **Summary**:确认仿真工程信息,勾选**Run simulator****Add top-level signals to waveform display和Run simulation**,然后**Finish** 
- +仿真软件会自动启动运行仿真并显示仿真结果查看仿真结果是否符合预期功能如果不符合电路功能,则修改Verilog代码保存后,在**Active-HDL**中选择**Design—Compile All** 重新编译文件,编译通过后,在**Simulation**中重新开始仿真。 
-^ 资源 | 数量 ​ | 比例 ​ | 说明 ​ | +\\ 
-^ LUTs | 7    | 0%    |   |  +\\ 
-^ 寄存器 | 0  | 0% |   | +=== 5. 综合 === 
-^ 存储器 | 0  | 0%   ​| ​   | +\\ 
-^ IO管脚 ​  | 26 | 23%  |    | +在Lattice Diamond软件的**Process**一栏,双击第一项**Synthesize Design**进行综合(确保仿真文件设置为**simulation**后不参综合),综合结果会在下面的**Output**一栏中给出,如果有错误则修改Verilog文件后重新综合直至综合成功 
-^ 时钟频率 | 12MHz |   ​| ​   | +\\ 
-===== 七、 源文件 ===== +\\ 
 +=== 6. 分配管脚 === 
 +\\ 
 +打开**Tools—Spreadsheet View**或是点击图标{{::​分配管脚.png|}}在**Port Assignments**一栏中对输入输出信号分配引脚。 
 +\\ 
 +\\ 
 +=== 7. 布局布线 ​=== 
 +\\ 
 +双击**Process**一栏的**Map Design**和**Place & Route Design**完成**FPGA**内部的布局布线。 
 +\\ 
 +\\ 
 +=== 8. 生成配置文件 ​==
 +\\ 
 +勾选并双击**JEDEC File**生成可下载的**jed**文件。 
 +\\ 
 +\\ 
 +=== 9. 下载 ​=== 
 +\\ 
 + ​打开**Tools—Programmer**或单击图标,根据下图选择设备和下载文件,点击上面的绿色按钮**Program**,下载**jed**文件到FPGA,下载成功后**Status**状态显示**PASS**(下载前确保下载器驱动成功安装)。 
 +{{:​下载成功.png|}} 
 +观察开发板现象。