首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModelSim模拟结果与我的多路复用器代码的逻辑不匹配

ModelSim模拟结果与我的多路复用器代码的逻辑不匹配
EN

Stack Overflow用户
提问于 2019-06-01 06:11:09
回答 1查看 554关注 0票数 0

我用"always“和"case”语句编写了一些关于7对1多路复用器的verilog代码,但当我在ModelSim中进行模拟时,结果似乎并不像预期的那样工作

复用器逻辑的一部分:

代码语言:javascript
复制
when SW[9:7] = 000, OUT = SW[0]

矛盾:

代码语言:javascript
复制
In the simulation when SW[0] is changed to 1, the outcome stays at 0.
代码语言:javascript
复制
module SevenToOneMUX(SW, OUT);

    input [9:0] SW;
    output reg OUT;

    always@(SW[9:7])
    begin
        case (SW[9:7])
            3'b000: OUT = SW[0];
            3'b001: OUT = SW[1];
            3'b010: OUT = SW[2];
            3'b011: OUT = SW[3];
            3'b100: OUT = SW[4];
            3'b101: OUT = SW[5];
            3'b110: OUT = SW[6];
        endcase
    end

endmodule
EN

回答 1

Stack Overflow用户

发布于 2019-06-01 07:26:25

问题是您只将SW的3个最重要的位放在您的组合块的敏感度列表中。这意味着,如果SW[9:7]发生变化,编译器将只执行always@(SW[9:7])块。

如果您想要模拟器在SW的任何位发生变化时更新OUT,请将您的灵敏度列表更改为:

代码语言:javascript
复制
always@(*)
begin
    /*...*/
end

还值得注意的是,在创建可综合的组合逻辑时,通常使用在Verilog-2001中添加的always@(*)。在硬件中,真正的逻辑对右边的每个变量都是“敏感的”。这意味着:如果您描述的逻辑的任何输入发生变化,输出也将发生变化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56402227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档