Vhdl 使用2to1mux';Modelsim中的s

Vhdl 使用2to1mux';Modelsim中的s,vhdl,modelsim,Vhdl,Modelsim,在使用Modelsim成功编译和模拟下面的代码(这只是一个使用两个2to1 mux构建的简单4to1 mux)之后,我运行了一个波形测试,以查看它的外观,无论输入值如何,输出都连续处于U状态,下面是代码和结果: a.2to1多路复用器的代码: 实体mux2_1为 端口(a,b:标准逻辑向量(2到0); s:标准逻辑; e:输出标准逻辑向量(2到0); 末端mux2_1; mux2_1的架构wx为 开始 过程 开始 如果(s='0'),则 首先,我建议你去读一些别人的VHDL代码,试着理解他们在做

在使用Modelsim成功编译和模拟下面的代码(这只是一个使用两个2to1 mux构建的简单4to1 mux)之后,我运行了一个波形测试,以查看它的外观,无论输入值如何,输出都连续处于U状态,下面是代码和结果:

a.2to1多路复用器的代码:

实体mux2_1为
端口(a,b:标准逻辑向量(2到0);
s:标准逻辑;
e:输出标准逻辑向量(2到0);
末端mux2_1;
mux2_1的架构wx为
开始
过程
开始
如果(s='0'),则

首先,我建议你去读一些别人的VHDL代码,试着理解他们在做什么。你所拥有的是可以做某事的代码,但不一定是你想要它做的。人们在开始VHDL编码时犯的一个大错误是认为它是软件,并且可以用与软件相同的方式编程;事实并非如此。要想精通它,您必须从硬件的角度来考虑,并为代码声明什么样的逻辑

wait语句是一个问题。wait语句唯一应该使用的地方是测试台,因为它们不能映射到逻辑单元。因此,您要做的是删除wait语句并创建一个流程敏感度列表(在本例中,您甚至不需要它,但这是一个很好的实践)

p_MUX_2x1:进程(a、b、s)
开始
如果(s='0'),则

我相信这个错误是由于您的2:1多路复用器中的“wait”语句造成的。请把它拿走

这里有一个旁注:只在测试台上尽可能多地使用wait语句。由于等待是不可合成的,您将遇到一些错误


谢谢你

错误:4,警告:2-你读了吗?你在
mux4_1
中使用
c
d
做什么?(提示:什么都没有)那么你声明
j
的目的是什么?@mkrieger1我刚刚重新编辑了代码并重新运行了模拟,显然,问题仍然存在(我也更新了帖子),我似乎真的找不到打开成绩单中报告的错误的方法,只需单击它什么也做不了,双击会将我重定向到成绩单窗口的最底部。请提供一个。注意:mux2_1的体系结构wx中的未标记进程没有敏感度列表,但包含一个没有超时子句的最终等待语句,并且在模拟开始时挂起后不会恢复。此设计无法响应其输入(实例k3)在以下增量周期中的变化。
p_MUX_2x1 : process (a, b, s)
begin
   if (s = '0') then
      e <= a;
   else
      e <= b;
   end if;
end process p_MUX_2x1;