• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

有谁用过VHDL语言的吗?请进来看一下子:)

我刚学vhdl,有几个疑问的地方想请教各位大侠,大家不吝赐教啊!
1。vhdl里面有没有类似高级语言或汇编语言里的“宏”?宏用起来好方便的说,但vhdl里好像没看到有这个。如果我想把一段程序做成一个模块,以后不停调用模块该怎么办?只有用子函数了?
3。为什么我不能用while()loop指令,编译时总出错,并告诉我只有用第一种循环指令可用:for xx in()loop。
2。我看别人的程序里,定时器都是自己编程实现的,但诸如“after 10 ns”“wait for 2 ns”又是怎么回事?内部没有定时器它怎么知道延迟10ns呢?
3。帮看看下面怎么回事?
    process(a_1)
    begin
    if(a_1'event and a_1='1')then
       a1<=a_1  after 1 us;
     end if;
       a1<=a_1 ;
       end process;
我想实现的是:当a_1变化时,若是上升沿,则延迟1us,若下降沿,不需延迟。
但编译通不过,说重复赋值?我如何来实现延迟啊?

大侠们,谢过了,帮帮我好吗?
全部回复(4)
正序查看
倒序查看
frex
LV.4
2
2005-01-07 00:37
after 10ns 等语句是用于仿真时候,综合以后就没有意义了
0
回复
frex
LV.4
3
2005-01-07 00:38
宏是没有的,不过有元件,定义好了,直接映射就可以了
0
回复
frex
LV.4
4
2005-01-07 00:39
在同一个process里,不能对同一个信号付值两次
0
回复
mephisto
LV.2
5
2005-01-07 09:01
@frex
在同一个process里,不能对同一个信号付值两次
谢谢赐教!
再请问一下:
1.为什么我的MAXPLUS II版本里,不能用while loop和generic指令(其他不能用的还没碰上呢),哪怕是书上现成的例子,涉及到这几条指令的,都告诉我无法用它。

2.“after 10 ns用于仿真,综合后就没用了”是不是指如果我把程序下载到CPLD器件后,信号发生的时候就没法实现延迟了?

3.那我要实现上升沿延迟该怎么办?有没有空指令或等待指令,让我定时器计数的时候不干任何事,只是等待就行。
0
回复