在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 8294|回复: 9

[讨论] 如何用Modelsim观察源代码中的中间寄存器信号

[复制链接]
发表于 2010-6-10 16:22:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
有谁知道用Modelsim仿真怎么把代码中的中间寄存器信号加进去呢? 在激励文件中该怎样修改呀?
比如说用quartus仿真这一点就非常明显  我的意思就是说用modelsim仿真能不能像quartus仿真那样很方便地反寄存器信号加进去呢?
源代码(对时钟进行同步):
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY CLK_TB IS
PORT(CLK_10M: IN STD_LOGIC;
   CLK_20M: IN STD_LOGIC;
   CLK_50M: IN STD_LOGIC;
   DATA_A : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
   DATA_B : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
   DATA_OUT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
   DATB_OUT: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
  );
END ENTITY CLK_TB;
ARCHITECTURE ART OF CLK_TB IS
SIGNAL A_1:STD_LOGIC;
SIGNAL A_2:STD_LOGIC;
SIGNAL A_3:STD_LOGIC;
SIGNAL B_1:STD_LOGIC;
SIGNAL B_2:STD_LOGIC;
SIGNAL B_3:STD_LOGIC;
SIGNAL A_OUT:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL B_OUT:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(CLK_50M,CLK_10M,A_1,A_2,A_3)
BEGIN
  IF CLK_50M'EVENT AND CLK_50M='1' THEN
   A_1<=CLK_10M;
   A_2<=A_1;
   A_3<=(NOT A_2) AND A_1;
  END IF;
END PROCESS;

PROCESS(CLK_50M,CLK_20M,B_1,B_2,B_3)
BEGIN
  IF CLK_50M'EVENT AND CLK_50M='1' THEN
   B_1<=CLK_20M;
   B_2<=B_1;
   B_3<=(NOT B_2) AND B_1;
  END IF;
END PROCESS;

PROCESS(CLK_50M,A_3,DATA_A,A_OUT)
BEGIN
  IF CLK_50M'EVENT AND CLK_50M='1' THEN
   IF A_3='1' THEN
    A_OUT<=DATA_A;
   ELSE
    A_OUT<=A_OUT;
   END IF;
  END IF;
END PROCESS;

PROCESS(CLK_50M,B_3,DATA_B,B_OUT)
BEGIN
  IF CLK_50M'EVENT AND CLK_50M='1' THEN
   IF B_3='1' THEN
    B_OUT<=DATA_B;
   ELSE
    B_OUT<=B_OUT;
   END IF;
  END IF;
END PROCESS;

DATA_OUT<=A_OUT;
DATB_OUT<=B_OUT;

END ARCHITECTURE ART;


Testbench文件代码:
LIBRARY ieee;                                               
USE ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;                              
ENTITY CLK_TB_vhd_tst IS
END CLK_TB_vhd_tst;
ARCHITECTURE CLK_TB_arch OF CLK_TB_vhd_tst IS
-- constants                                                
-- signals
CONSTANT NEWCLK:TIME:=20 NS;                                                   
SIGNAL TEST_CLK_10M : STD_LOGIC;
SIGNAL TEST_CLK_20M : STD_LOGIC;
SIGNAL TEST_CLK_50M : STD_LOGIC;
SIGNAL TEST_DATA_A : STD_LOGIC_VECTOR(3 downto 0);
SIGNAL TEST_DATA_B : STD_LOGIC_VECTOR(3 downto 0);
SIGNAL TEST_DATA_OUT : STD_LOGIC_VECTOR(3 downto 0);
SIGNAL TEST_DATB_OUT : STD_LOGIC_VECTOR(3 downto 0);
COMPONENT CLK_TB
PORT (
CLK_10M : in STD_LOGIC;
CLK_20M : in STD_LOGIC;
CLK_50M : in STD_LOGIC;
DATA_A : in STD_LOGIC_VECTOR(3 downto 0);
DATA_B : in STD_LOGIC_VECTOR(3 downto 0);
DATA_OUT : out STD_LOGIC_VECTOR(3 downto 0);
DATB_OUT : out STD_LOGIC_VECTOR(3 downto 0) );
END COMPONENT;
BEGIN
i1 : CLK_TB PORT MAP (
-- list connections between master ports and signals
CLK_10M => TEST_CLK_10M,
CLK_20M => TEST_CLK_20M,
CLK_50M => TEST_CLK_50M,
DATA_A => TEST_DATA_A,
DATA_B => TEST_DATA_B,
DATA_OUT => TEST_DATA_OUT,
DATB_OUT => TEST_DATB_OUT
);
CLK_50M : PROCESS                                               
-- variable declarations                                    
BEGIN                                                        
    TEST_CLK_50M<='0';
WAIT FOR NEWCLK/2;
TEST_CLK_50M<='1';
WAIT FOR NEWCLK/2;                                                      
END PROCESS CLK_50M;
CLK_10M : PROCESS                                               
-- variable declarations                                    
BEGIN                                                        
    TEST_CLK_10M<='0';
WAIT FOR NEWCLK*5;
TEST_CLK_10M<='1';
WAIT FOR NEWCLK*5;                                                      
END PROCESS CLK_10M;   
CLK_20M : PROCESS                                               
-- variable declarations                                    
BEGIN                                                        
    TEST_CLK_20M<='0';
WAIT FOR (NEWCLK*5)/2;
TEST_CLK_20M<='1';
WAIT FOR (NEWCLK*5)/2;                                                      
END PROCESS CLK_20M;                                             

DATA_A : PROCESS                                             
-- optional sensitivity list                                 
-- (        )                                                
-- variable declarations                                      
BEGIN                                                         
TEST_DATA_A<="0000";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="0001";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="0010";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="0011";
WAIT FOR NEWCLK*5;  
TEST_DATA_A<="0100";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="0101";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="0110";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="0111";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="1000";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="1001";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="1010";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="1011";
WAIT FOR NEWCLK*5;  
TEST_DATA_A<="1100";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="1101";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="1110";
WAIT FOR NEWCLK*5;
TEST_DATA_A<="1111";
WAIT FOR NEWCLK*5;                                                
END PROCESS DATA_A;
   
DATA_B : PROCESS                                             
-- optional sensitivity list                                 
-- (        )                                                
-- variable declarations                                      
BEGIN                                                         
    TEST_DATA_B<="0000";
WAIT FOR NEWCLK*5;

TEST_DATA_B<="0010";
WAIT FOR NEWCLK*5;

TEST_DATA_B<="0100";
WAIT FOR NEWCLK*5;
TEST_DATA_B<="0110";
WAIT FOR NEWCLK*5;
TEST_DATA_B<="1000";
WAIT FOR NEWCLK*5;

TEST_DATA_B<="1010";
WAIT FOR NEWCLK*5;
   
TEST_DATA_B<="1100";
WAIT FOR NEWCLK*5;

TEST_DATA_B<="1110";
WAIT FOR NEWCLK*5;  
                                                     
END PROCESS DATA_B;   
                 
END CLK_TB_arch;
以上代码是正确的,不过在仿真时只能看到源代码中的端口信号,而现在我想看到源代码其中的中间寄存器信号,该怎么办呢?
请问大家用modelsim怎么观察源代码中的A_1,A_2,A_3,B_1,B_2,B_3中间寄存器信号?在testbench中该如何修改呢?
 楼主| 发表于 2010-6-10 16:25:30 | 显示全部楼层
请教高手指教呀?  困扰了很长时间啦!!
发表于 2010-6-10 17:09:00 | 显示全部楼层
你在SIM窗口点一下你引用的模块,在上面是i1,然后在objects里出现对应的信号了,加进去去看即可。
注意,点击start simulation时要将最下面的enable optimization选项前的勾去掉,
发表于 2010-6-10 18:39:09 | 显示全部楼层
3#正解
 楼主| 发表于 2010-6-10 19:08:11 | 显示全部楼层
呵呵 是的 后来我才找到
3# eaglelsb
 楼主| 发表于 2010-6-10 19:09:41 | 显示全部楼层
不过我再想说的是有时候为什么里面有很多杂乱的信号,而且有时候仿真不出来 那些中间寄存器信号没有数据 这又是为什么呢? 3# eaglelsb
发表于 2010-6-10 20:08:25 | 显示全部楼层
看出问题来了,你的process敏感信号列表太多,只留CLK,其它去掉再试试。
你继续是想做同步的,那只能在时钟的上升沿打数啊,
发表于 2011-3-15 13:58:32 | 显示全部楼层
回复 3#
貌似不行啊,那个选项是灰色的,根本没法选择
发表于 2011-6-26 08:55:40 | 显示全部楼层
回复 8# wjfblack


    你的问题解决了吗? 我的也是灰色。不能勾选啊!
发表于 2011-6-28 11:09:34 | 显示全部楼层
这个问题我也一直不会,同求高手指点啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-3 23:59 , Processed in 0.035744 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表