|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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中该如何修改呢? |
|