差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 后一修订版 | 前一修订版 | ||
|
实验1-3_卡诺图变换 [2017/02/24 16:47] zhijun 创建 |
实验1-3_卡诺图变换 [2017/02/24 16:54] (当前版本) zhijun |
||
|---|---|---|---|
| 行 18: | 行 18: | ||
| 如果“1”输出项多余8个,我们就得设法减少乘积项数,使得逻辑函数在器件上得以实现。“卡诺图”是种完成函数化简的非常简单实用的图形化方法,特别是对于含有2、3和4个变量的布尔函数,对于多于4个变量的布尔函数化简,卡诺图的化简方法就开始变得繁琐。 | 如果“1”输出项多余8个,我们就得设法减少乘积项数,使得逻辑函数在器件上得以实现。“卡诺图”是种完成函数化简的非常简单实用的图形化方法,特别是对于含有2、3和4个变量的布尔函数,对于多于4个变量的布尔函数化简,卡诺图的化简方法就开始变得繁琐。 | ||
| 卡诺图画圈原则: | 卡诺图画圈原则: | ||
| - | 1)对相邻的值为“1”的小方块画包围圈,画若干包围圈; | + | * 对相邻的值为“1”的小方块画包围圈,画若干包围圈; |
| - | a)每个包围圈中必须含有2n个小方块(n=0,1,2,……) | + | * 每个包围圈中必须含有2n个小方块(n=0,1,2,……) |
| - | b)小方块可重复被包围,但每个包围圈中必须含有其他包围圈没有的新小方块 | + | * 小方块可重复被包围,但每个包围圈中必须含有其他包围圈没有的新小方块 |
| - | c)不能漏掉任何值为1的小方块 | + | * 不能漏掉任何值为1的小方块 |
| - | d)包围圈所含的小方块数目要尽可能多,包围圈数目要尽可能少 | + | * 包围圈所含的小方块数目要尽可能多,包围圈数目要尽可能少 |
| - | e)画包围圈的顺序由大→小 | + | * 画包围圈的顺序由大→小 * 普通列表项目 |
| - | 2)将每个包围圈中的最小项合并成一项→乘积项; | + | * 将每个包围圈中的最小项合并成一项→乘积项; |
| - | a)留下相同的因子,消去不同的因子 | + | * 留下相同的因子,消去不同的因子 |
| - | 3)对各个包围圈合并成的乘积项求逻辑和; | + | * 对各个包围圈合并成的乘积项求逻辑和; |
| 多输入电路的真值表与对应的卡诺图如下图所示: | 多输入电路的真值表与对应的卡诺图如下图所示: | ||
| + | {{ ::卡诺图真值表.png |}} | ||
| ===== 4.Verilog HDL建模描述 ===== | ===== 4.Verilog HDL建模描述 ===== | ||
| - | ==== 程序清单gates.v ==== | + | LED默认状态为点亮,若其他LED不加控制,则会常亮,影响显示状态。以下代码目的为改变其默认参数,使之常灭: |
| - | + | ||
| - | <code verilog> | + | |
| - | // -------------------------------------------------------------------- | + | |
| - | // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< | + | |
| - | // -------------------------------------------------------------------- | + | |
| - | // File name : gates.v | + | |
| - | // Module name : gates | + | |
| - | // Author : Step | + | |
| - | // Description : Logic gates | + | |
| - | // Web : www.stepfpga.com | + | |
| - | // | + | |
| - | // -------------------------------------------------------------------- | + | |
| - | // Code Revision History : | + | |
| - | // -------------------------------------------------------------------- | + | |
| - | // Version: |Mod. Date: |Changes Made: | + | |
| - | // V1.0 |2015/11/11 |Initial ver | + | |
| - | // -------------------------------------------------------------------- | + | |
| - | 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 | + | |
| - | + | ||
| - | </code> | + | |
| - | + | ||
| - | ==== 仿真程序清单gates_tb.v ==== | + | |
| - | + | ||
| - | + | ||
| - | <code verilog> | + | |
| - | //******************************************************** | + | |
| - | // | + | |
| - | // Copyright(c)2016, STEP FPGA | + | |
| - | // All rights reserved | + | |
| - | // | + | |
| - | // File name : gates_tb.v | + | |
| - | // Module name : gates_tb | + | |
| - | + | ||
| - | // Author : STEP | + | |
| - | // Email : info@stepfpga.com | + | |
| - | // Data : 2016/08/19 | + | |
| - | + | ||
| - | // Version : V1.0 | + | |
| - | // Description : testbench module | + | |
| - | // | + | |
| - | // Modification history | + | |
| - | // ---------------------------------------------------------------------------- | + | |
| - | // Version Data(2016/08/19) V1.0 | + | |
| - | // Description | + | |
| - | // | + | |
| - | //******************************************************** | + | |
| - | // | + | |
| - | // | + | |
| - | //******************* | + | |
| - | //DEFINE MODULE PORT | + | |
| - | //******************* | + | |
| - | `timescale 1ns/100ps | + | |
| - | module gates_tb; | + | |
| - | + | ||
| - | reg a,b; | + | |
| - | wire [5:0] led; | + | |
| - | initial | + | |
| - | begin | + | |
| - | a=0; | + | |
| - | b=0; | + | |
| - | #50; | + | |
| - | a=0; | + | |
| - | b=1; | + | |
| - | #50; | + | |
| - | a=1; | + | |
| - | b=0; | + | |
| - | #50; | + | |
| - | a=1; | + | |
| - | b=1; | + | |
| - | #50; | + | |
| - | end | + | |
| - | gates gates_tb_uut( | + | |
| - | .a (a), | + | |
| - | .b (b), | + | |
| - | .led (led), | + | |
| - | .empty () | + | |
| - | ); | + | |
| - | endmodule | + | |
| - | </code> | + | assign empty=8'b1111_1111; |
| + | 由于LED为低电平触发,若直接将z连接在LED管脚上,LED亮将代表输入为低电平,LED灭代表输入为高电平。所以有如下代码,使之更符合我们的思维习惯: | ||
| + | assign led=~z; | ||
| + | 本实验代码编写比较简单,只需一个f的组合逻辑即可,重点在卡诺图简化: | ||
| + | assign f=b&c&d|a&c&d|a&b&d|a&b&c; | ||
| + | 由上述逻辑表达式构成的原理图,如下图所示: | ||
| + | {{ ::卡诺图原理图.png |}} | ||
| ===== 五、 实验步骤===== | ===== 五、 实验步骤===== | ||