MyFPGA Forum

 找回密码
 注册
搜索
查看: 6798|回复: 9
打印 上一主题 下一主题

求助Modelsim仿真问题

[复制链接]
跳转到指定楼层
1#
发表于 2012-3-12 17:24:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新手 刚学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红线。
不知道哪里出错了。
2#
发表于 2012-3-13 11:01:15 | 只看该作者
我看不懂VHDL.不过我发现
out1和out2如果都为输出的话,为什么还有
out1=>out1,out2=>out2

赋值的语句呢?
3#
 楼主| 发表于 2012-3-13 11:22:18 | 只看该作者
回复 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;
4#
发表于 2012-3-13 12:01:41 | 只看该作者
我刚刚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。
5#
发表于 2012-3-13 12:04:45 | 只看该作者
回复 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。
6#
 楼主| 发表于 2012-3-13 12:05:25 | 只看该作者
回复 4# tingtang


    VHDL没有wire这一说哦。只有信号,变量,常量什么的。
7#
发表于 2012-3-13 12:06:04 | 只看该作者
回复  tingtang
VHDL的testbench就是这样写的,要元件例化。

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



    原来是instance component,不是赋值,哈!!!!!
8#
发表于 2012-3-13 17:36:12 | 只看该作者
回复 6# 3539591


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

  还是你没有在testbench定义out1,out2啊?我没看见。。
9#
 楼主| 发表于 2012-3-14 14:49:54 | 只看该作者
回复 8# tingtang


    试过了,不行。
   Buffer端口必须与Buffer端口对接,所以书上说谨慎使用buffer端口。
10#
发表于 2012-3-14 20:37:25 | 只看该作者
回复 9# 3539591


   wo ye bu zhidao le
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-4-20 20:32 , Processed in 0.045019 second(s), 14 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表