我正在尝试通过P. Ashenden的书:VHDL设计师指南来学习VHDL。第一章的练习10要求您在VHDL中编写2对1(我假设1位宽)MUX并进行模拟。我提前为一个完整的菜鸟道歉。这是我的第一个VHDL代码。
我的MUX在合成中没有产生任何错误或警告。我的测试台也不会产生错误或警告。但是,除了信号的名称外,模拟完全是空白的。
我已经尝试在线查看大量其他MUX示例(以及本书中的一个基准测试示例),所有这些都在我尝试合成它们时出错,所以我没有足够的信心使用它们作为向导,并没有从他们那里得到太多。我不确定我在这里做错了什么。我会包含一个模拟图像,但我没有足够的重复点:(
另外,我意识到一个好的MUX也应该有它没有接收到选择输入/高阻抗值的情况,等等。在这种情况下,我只是想让玩具模型工作。
MUX代码是:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity MUXtop is
Port (a, b, sel: in bit;
z: out bit);
end MUXtop;
architecture behav of MUXtop is
begin
choose: process is
begin
if sel = '0' then
z <= b;
else
z <= a;
end if;
end process choose;
end architecture behav;
测试台代码是:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY MUXtest IS
END MUXtest;
ARCHITECTURE behavior OF MUXtest IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT MUXtop
PORT(
a : IN bit;
b : IN bit;
sel : IN bit;
z : OUT bit
);
END COMPONENT MUXtop;
--Inputs
signal a : bit := '0';
signal b : bit := '0';
signal sel : bit := '0';
--Outputs
signal z : bit;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: MUXtop PORT MAP (
a => a,
b => b,
sel => sel,
z => z
);
-- Stimulus process
stimulus: process
begin
wait for 10 ns;
a <= '1';
wait for 10 ns;
sel <= '1';
wait for 10 ns;
b <= '1';
wait;
end process stimulus;
END architecture behavior;
答案 0 :(得分:1)
使用类型位(在包标准中声明)时,您不需要包std_logic_1164的use子句。
MUXtop中的流程语句choose
没有敏感子句,导致流程在模拟中持续执行。 (除非你跳过可能设置为无穷大的增量循环迭代限制,否则它不会做任何事情。)
我添加了一个敏感列表,在两个设计单元中注释掉了多余的使用条款,并添加了一些更多的刺激步骤以及最终wait for 10 ns;
以允许在您的测试平台中看到最后一个操作:
library IEEE;
-- use IEEE.STD_LOGIC_1164.ALL;
entity MUXtop is
Port (a, b, sel: in bit;
z: out bit);
end MUXtop;
architecture behav of MUXtop is
begin
choose: process (a, b, sel) -- is
begin
if sel = '0' then
z <= b;
else
z <= a;
end if;
end process choose;
end architecture behav;
LIBRARY ieee;
-- USE ieee.std_logic_1164.ALL;
ENTITY MUXtest IS
END MUXtest;
ARCHITECTURE behavior OF MUXtest IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT MUXtop
PORT(
a : IN bit;
b : IN bit;
sel : IN bit;
z : OUT bit
);
END COMPONENT MUXtop;
--Inputs
signal a : bit := '0';
signal b : bit := '0';
signal sel : bit := '0';
--Outputs
signal z : bit;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: MUXtop PORT MAP (
a => a,
b => b,
sel => sel,
z => z
);
-- Stimulus process
stimulus: process
begin
wait for 10 ns;
a <= '1';
wait for 10 ns;
sel <= '1';
wait for 10 ns;
sel <= '0'; -- added
wait for 10 ns; -- added
b <= '1';
wait for 10 ns; -- added
wait;
end process stimulus;
END architecture behavior;
这就是: