MyFPGA Forum

标题: 求助Modelsim仿真问题 [打印本页]

作者: 3539591    时间: 2012-3-12 17:24
标题: 求助Modelsim仿真问题
新手 刚学VHDL
对6分频进行仿真时,如下面testbench
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY freq_dividertb IS
END freq_dividertb;

ARCHITECTURE behavior OF freq_dividertb IS
COMPONENT freq_divider IS
PORT(clk: IN STD_LOGIC;

out1,out2:BUFFER STD_LOGIC
) ;
END COMPONENT freq_divider;

SIGNAL clk:STD_LOGIC:='0';

SIGNAL out1:STD_LOGIC:='0';
SIGNAL out2:STD_LOGIC:='0';

constant clk_period=50ns;

BEGIN
  u0:freq_divider PORT MAP(clk=>clk,out1=>out1,out2=>out2);
  
  PROCESS
    BEGIN
      clk<='0';
      WAIT FOR clk_period/2;
      clk<='1';
      WAIT FOR clk_period/2;
    END PROCESS;
   
  END ARCHITECTURE behavior;
out1和out2都为U红线。
不知道哪里出错了。
作者: tingtang    时间: 2012-3-13 11:01
我看不懂VHDL.不过我发现
out1和out2如果都为输出的话,为什么还有
out1=>out1,out2=>out2

赋值的语句呢?
作者: 3539591    时间: 2012-3-13 11:22
回复 2# tingtang
VHDL的testbench就是这样写的,要元件例化。

下面是我的源程序,仿真不出来。
LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY freq_divider IS

PORT(clk: IN STD_LOGIC;

out1,out2:BUFFER STD_LOGIC);

END freq_divider;



ARCHITECTURE example OF freq_divider IS

SIGNAL count1:INTEGER RANGE 0 TO 7;

BEGIN

PROCESS (clk)

VARIABLE count2:INTEGER RANGE 0 TO 7;

BEGIN

IF(clk'EVENT AND clk='1') THEN
  
count1<=count1+1;
count2:=count2+1;

IF(count1=6)THEN

out1<=NOT out1;

count1<=0;

END IF;
IF(count2=3)THEN
  out2<=NOT out2;
  count2:=0;
END IF;
END IF;

END PROCESS;

END example;
作者: tingtang    时间: 2012-3-13 12:01
我刚刚Google “BUFFER STD_LOGIC”,意思好像说是output reg类型。如果想在Modelsim里看这个信号的话,的确不行(至少我发现 寄存器类型的数据 output到 testbench会报错),希望哪位大神找到解决办法。

我是一般这么解决的:
定义2个wire类型的变量a和b,也就是output,替换掉元件port list的out1和out2,然后再元件的code中吧out1和out2持续赋值给a和b,然后再testbench中观察a和b。就ok啦。

说白了就是reg类型的变量不能直接输出到testbench。
作者: tingtang    时间: 2012-3-13 12:04
回复 3# 3539591


   
我刚刚Google “BUFFER STD_LOGIC”,意思好像说是output reg类型。如果想在Modelsim里看这个信号的话,的确不行(至少我发现 寄存器类型的数据 output到 testbench会报错),希望哪位大神找到解决办法。

我是一般这么解决的:
定义2个wire类型的变量a和b,也就是output,替换掉元件port list的out1和out2,然后再元件的code中吧out1和out2持续赋值给a和b,然后再testbench中观察a和b。就ok啦。

说白了就是reg类型的变量不能直接输出到testbench。
作者: 3539591    时间: 2012-3-13 12:05
回复 4# tingtang


    VHDL没有wire这一说哦。只有信号,变量,常量什么的。
作者: tingtang    时间: 2012-3-13 12:06
回复  tingtang
VHDL的testbench就是这样写的,要元件例化。

下面是我的源程序,仿真不出来。
LIBRARY ie ...
3539591 发表于 2012-3-13 11:22



    原来是instance component,不是赋值,哈!!!!!
作者: tingtang    时间: 2012-3-13 17:36
回复 6# 3539591


    那你就在testbench把out1,out2:BUFFER STD_LOGIC改成 output 类型的,不要buffer的特性。。

  还是你没有在testbench定义out1,out2啊?我没看见。。
作者: 3539591    时间: 2012-3-14 14:49
回复 8# tingtang


    试过了,不行。
   Buffer端口必须与Buffer端口对接,所以书上说谨慎使用buffer端口。
作者: tingtang    时间: 2012-3-14 20:37
回复 9# 3539591


   wo ye bu zhidao le




欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/) Powered by Discuz! X3