差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 上一修订版 两侧同时换到之后的修订记录 | ||
实验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> | + | assign empty=8'b1111_1111; |
- | // -------------------------------------------------------------------- | + | |
- | // >>>>>>>>>>>>>>>>>>>>>>>>> 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> | + | |
+ | 由于LED为低电平触发,若直接将z连接在LED管脚上,LED亮将代表输入为低电平,LED灭代表输入为高电平。所以有如下代码,使之更符合我们的思维习惯: | ||
+ | assign led=~z; | ||
+ | | ||
+ | 本实验代码编写比较简单,只需一个f的组合逻辑即可,重点在卡诺图简化: | ||
+ | assign f=b&c&d|a&c&d|a&b&d|a&b&c; | ||
+ | 由上述逻辑表达式构成的原理图,如下图所示: | ||
+ | {{ ::卡诺图原理图.png |}} | ||
===== 五、 实验步骤===== | ===== 五、 实验步骤===== |