博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】组合逻辑中latch的出现与避免
阅读量:5039 次
发布时间:2019-06-12

本文共 2386 字,大约阅读时间需要 7 分钟。

在组合逻辑中,容易综合出锁存器的语句是if和case,其实只要配对使用if...else;case用default就基本上可以避免锁存器;

case1(有锁存器):
module mux_latch
(
    input   [3:0] data,
    input   [1:0] valid,
    input   flag,
    output reg valid_data
);
always @ (*)
    begin
        if(valid==2'd0) valid_data = data[3];
        if(valid==2'd1) valid_data = data[2];
        if(valid==2'd2) valid_data = data[1];
        if(valid==2'd3) valid_data = data[0];
    end
endmodule
//---------------------------------------------------------
case 2解决办法1:加else与if配对
always @ (*)
    begin
        if(valid==2'd0) valid_data = data[3];else
        if(valid==2'd1) valid_data = data[2];else
        if(valid==2'd2) valid_data = data[1];else
        if(valid==2'd3) valid_data = data[0];else
                     valid_data = 1'b0;
    end
//-----------------------------------------------------------
case3解决办法2:赋初始值
always @ (*)
    begin
   valid_data = 1'b0
        if(valid==2'd0) valid_data = data[3];
        if(valid==2'd1) valid_data = data[2];
        if(valid==2'd2) valid_data = data[1];
        if(valid==2'd3) valid_data = data[0];
    end
//----------------------------------------------------------
case 4(有锁存器)
always @ (*)
begin
    case(valid)
        2'b00 : begin if(flag) valid_data = data[0];end
        2'b01 : begin if(flag) valid_data = data[1];end
        2'b10 : begin if(flag) valid_data = data[2];end
        2'b11 : begin if(flag) valid_data = data[3];end
    endcase
//-------------------------------------------------------------
case 5(有锁存器)
always @ (*)
begin
    case(valid)
        2'b00 : begin if(flag) valid_data = data[0];end
        2'b01 : begin if(flag) valid_data = data[1];end
        2'b10 : begin if(flag) valid_data = data[2];end
        2'b11 : begin if(flag) valid_data = data[3];end
        default:valid_data=1'b0;
    endcase
end
//--------------------------------------------------------------
case 6解决办法---赋初始值
always @ (*)
begin
   valid_data=1'b0;
    case(valid)
        2'b00 : begin if(flag) valid_data = data[0];end
        2'b01 : begin if(flag) valid_data = data[1];end
        2'b10 : begin if(flag) valid_data = data[2];end
        2'b11 : begin if(flag) valid_data = data[3];end
    endcase
end
//----------------------------------------------------------------
case7解决办法-- 加else
always @ (*)
begin
    case(valid)
        2'b00 : begin if(flag) valid_data = data[0];else valid_data = 1'b0;end
        2'b01 : begin if(flag) valid_data = data[1];else valid_data = 1'b0;end
        2'b10 : begin if(flag) valid_data = data[2];else valid_data = 1'b0;end
        2'b11 : begin if(flag) valid_data = data[3];else valid_data = 1'b0;end
    endcase
end

转载于:https://www.cnblogs.com/poiu-elab/archive/2012/06/15/2551513.html

你可能感兴趣的文章
drf权限组件
查看>>
输入月份和日期,得出是今年第几天
查看>>
利用mysqldump备份mysql
查看>>
Qt中子窗口全屏显示与退出全屏
查看>>
使用brew安装软件
查看>>
[BZOJ1083] [SCOI2005] 繁忙的都市 (kruskal)
查看>>
吴裕雄 python 机器学习——数据预处理嵌入式特征选择
查看>>
Centos6.4安装JDK
查看>>
201521123069 《Java程序设计》 第4周学习总结
查看>>
线性表的顺序存储——线性表的本质和操作
查看>>
【linux】重置fedora root密码
查看>>
数组的扩展
查看>>
关于空间背景颜色的操作
查看>>
HDU 6237 - A Simple Stone Game ( 分解质因数 )
查看>>
用swing做一个简单的正则验证工具
查看>>
百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)和WGS-84坐标互转
查看>>
pig自定义UDF
查看>>
输入名字显示其生日,没有则让输入生日,做记录
查看>>
爬虫综合大作业
查看>>
HTML canvas原生js实现鼠标画图
查看>>