阅读:10939回复:7
VHDL 的if-elsif--else 的用法
用VHDL给FPGA编程,发现在拥到 IF----ELSIF--ELSIF---END IF;
和 IF---ELSIF----ELSE-----END IF 时,几乎每次都会出错,下面就是一个: if lhold=\'0\' then nlint<=\'1\'; elsif (bist_ok\'event and bist_ok=\'1\')THEN nlint<=\'0\'; ELSE nlint<=\'Z\'; end if; 错误处在后面的ELSE上,新手上路,请大侠们指点一下 IF --ELSE系列的用法。 谢了。 : |
|
沙发#
发布于:2003-05-13 19:21
-- elsif (bist_ok\'event and bist_ok=\'1\')THEN
是这个有问题。if-elsif--else 中不能有时钟检测语句. |
|
板凳#
发布于:2003-05-13 21:30
谢谢,那么我要实现如下的功能该怎么办?
当bist_ok上升沿到时,lint=0,其他时候均为高阻态。 下面的写法是错的(把Z改为0、1时在语法上是对的): IF LHOLD=\'1\'THEN nlint<=\'Z\';-- ELSif (bist_ok\'event and bist_ok=\'1\')THEN-- nlint<=\'0\'; end if; 再有下面的几句的IF---ELSE 也有错: process(en) begin IF(en=\'0\')then nlint<=\'0\' ; else nlint<=\'1\'; end if; END PROCESS; 恳求大侠们分析分析。 |
|
地板#
发布于:2003-05-15 15:29
异步复位电路是可以将时钟检测放在if -elsif_end if中,关键问题是你在设计时要考虑到硬件实现,不能想当然,一般时钟检测条件是没有else 情况的
|
|
地下室#
发布于:2003-05-15 20:59
当bist_ok上升沿到时,lint=0,其他时候均为高阻态。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 有这样的要求吗?只是上升沿一时刻高阻? |
|
5楼#
发布于:2003-05-15 23:33
是这样的:lint为本地中断,bist_ok为自检完成的标志,在自检完成后发出中断,(lint为inout类型),其余时刻本地不发出中断。
并非“只是上升沿一时刻高阻”,因为这一段是在一个process里面,lint 是在一个区间内为0,从bist_ok开始,到下一个敏感量有效为止。 上面提到的if---else的错误,我怀疑是由于MAXPLUS2的愿意,在SYNPLIFY下综合没有错。 |
|
6楼#
发布于:2003-05-22 18:06
再有下面的几句的IF---ELSE 也有错:
process(en) begin IF(en=\'0\')then nlint<=\'0\' ; else nlint<=\'1\'; end if; END PROCESS; 你上面这一段和 nlint <= en ; 有什么区别?? 你说nlint是一个inout类型,那么应该这样设计比较妥当 另定义一个信号nlint_reg 程序中的nlint为输出的地方都该为nlint_reg 最后加入这个语句 nlint <= \'0\' when nlint_reg = \'0\' else \'Z\' ; |
|
7楼#
发布于:2003-05-28 17:36
不要把简单问题复杂化
|
|