为什么用vhdl语言编好程序后,用modelsim仿真的时候,值(value)都是U,波形都是红线··
RT刚学的VHDL语言,用quartus10.1写好一个3-8译码器后,经过startcompilation=>starttestbenchtempltewriter,生...
RT
刚学的VHDL语言,用quartus10.1写好一个3-8译码器后,经过start compilation =>start test bench templte writer,生成了.vho和.vht2个文件,然后调用modelsim仿真,可是出现的只有红线,是不是少了什么激励信号啊?如果是的话应该怎样用VHDL写这个激励信号,然后加入工程进行仿真呢?是不是所有的激励信号都差不多呢?小弟初学quartus,还有好多不明白的地方啊,一个仿真搞得头都大了,哪位达人具体介绍一下吧····
3-8译码器程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_ARITH.ALL;
use ieee.std_logic_UNSIGNED.ALL;
entity decoder is
port(a,b,c,e1,e2,e3:in std_logic; --in design
y:out std_logic_vector(7 downto 0) --out design
);
end decoder;
architecture rt1 of decoder is
signal indata: std_logic_vector(2 downto 0); --signal design
begin
indata<= c&b&a;
process(indata,e1,e2,e3)
begin
if(e1='0'and e2='0'and e3='1') then
case indata is
when "000"=>y<="11111110";
when "001"=>y<="11111101";
when "010"=>y<="11111011";
when "011"=>y<="11110111";
when "100"=>y<="11101111";
when "101"=>y<="11011111";
when "110"=>y<="10111111";
when "111"=>y<="01111111";
when others=>y<="11111111";
end case;
else
y<="00000000";
end if;
end process;
end rt1;
采用的芯片是max7000s的epm7128slc84-5 展开
刚学的VHDL语言,用quartus10.1写好一个3-8译码器后,经过start compilation =>start test bench templte writer,生成了.vho和.vht2个文件,然后调用modelsim仿真,可是出现的只有红线,是不是少了什么激励信号啊?如果是的话应该怎样用VHDL写这个激励信号,然后加入工程进行仿真呢?是不是所有的激励信号都差不多呢?小弟初学quartus,还有好多不明白的地方啊,一个仿真搞得头都大了,哪位达人具体介绍一下吧····
3-8译码器程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_ARITH.ALL;
use ieee.std_logic_UNSIGNED.ALL;
entity decoder is
port(a,b,c,e1,e2,e3:in std_logic; --in design
y:out std_logic_vector(7 downto 0) --out design
);
end decoder;
architecture rt1 of decoder is
signal indata: std_logic_vector(2 downto 0); --signal design
begin
indata<= c&b&a;
process(indata,e1,e2,e3)
begin
if(e1='0'and e2='0'and e3='1') then
case indata is
when "000"=>y<="11111110";
when "001"=>y<="11111101";
when "010"=>y<="11111011";
when "011"=>y<="11110111";
when "100"=>y<="11101111";
when "101"=>y<="11011111";
when "110"=>y<="10111111";
when "111"=>y<="01111111";
when others=>y<="11111111";
end case;
else
y<="00000000";
end if;
end process;
end rt1;
采用的芯片是max7000s的epm7128slc84-5 展开
3个回答
展开全部
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY decoder_tb IS
END ENTITY;
ARCHITECTURE behaviour OF decoder_tb IS
COMPONENT decoder IS
PORT(a,b,c,e1,e2,e3 : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
--定义测试信号
SIGNAL a,b,c,e1,e2,e3 : STD_LOGIC;
SIGNAL y : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
U1: decoder PORT MAP(a,b,c,e1,e2,e3,y);--元件实例化
test_vector:PROCESS--测试进程
BEGIN
e1<='0';
e2<='0';
e3<='1';
a<='1';--测试输入101
b<='0';
c<='1';
WAIT FOR 100 ns;--等待一段时间变换测试向量,这样才能在波形图中看到输出
a<='0';--测试输入011
b<='1';
c<='1';
WAIT FOR 1000 ns;
END PROCESS;
END behaviour;
--百度一把testbench就能找到很多教写testbench的文章
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY decoder_tb IS
END ENTITY;
ARCHITECTURE behaviour OF decoder_tb IS
COMPONENT decoder IS
PORT(a,b,c,e1,e2,e3 : IN STD_LOGIC;
y : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END COMPONENT;
--定义测试信号
SIGNAL a,b,c,e1,e2,e3 : STD_LOGIC;
SIGNAL y : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
U1: decoder PORT MAP(a,b,c,e1,e2,e3,y);--元件实例化
test_vector:PROCESS--测试进程
BEGIN
e1<='0';
e2<='0';
e3<='1';
a<='1';--测试输入101
b<='0';
c<='1';
WAIT FOR 100 ns;--等待一段时间变换测试向量,这样才能在波形图中看到输出
a<='0';--测试输入011
b<='1';
c<='1';
WAIT FOR 1000 ns;
END PROCESS;
END behaviour;
--百度一把testbench就能找到很多教写testbench的文章
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在MODELSIM中红线的意思是未知值。
您可以给它赋一个初值,它就有值了。
寄存器是二值逻辑,0或者1
线网型除去0或者1还有高阻态Z。
其它强0强1态什么的就不说了,最好去查阅相关资料
您可以给它赋一个初值,它就有值了。
寄存器是二值逻辑,0或者1
线网型除去0或者1还有高阻态Z。
其它强0强1态什么的就不说了,最好去查阅相关资料
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
仿真的时候,你的module里面所有用到的input都需要给激励;不然就会是红线(unknown)
仿真:写一个testbench,在里面对需要的input添加激励
仿真:写一个testbench,在里面对需要的input添加激励
更多追问追答
追问
那怎样添加激励呢,也就是这个testbeach怎样写,比如说这个38译码器的激励
追答
大概说一下:
你在testbench里面对你design的input赋值,然后将其连到design里面
你学习VHDL的资料里面应该有参考,你看看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |