新手请教一个VHDL程序问题,谢谢!

[复制链接]
4615|11
 楼主| lzg12001 发表于 2009-11-27 21:36 | 显示全部楼层 |阅读模式
小弟写了个反相器,程序:
library ieee;
use ieee.std_logic_1164.all;
entity notbuffer is
port(a : in std_logic;b out std_logic);
end notbuffer;
architecture notbuffer of notbuffer is
begin
if(a'event) then
b<=NOT a AFTER 5 ns;
end if;
end notbuffer;
编译时一直提示if附近有语法错误    请各位大侠帮忙看看,小弟感激不尽!
patrick007 发表于 2009-11-28 11:56 | 显示全部楼层
还是买一本或者下一本书看一下比较好。。。

MIT Press - Circuit Design with VHDL (2007).pdf
ic00 发表于 2009-11-28 17:36 | 显示全部楼层
朋友,你的错误就是没有理解明白,VHDL的语法。if(a'event) then你这样写是错误的。我想你是要表示一个边沿触发但是你没有说明是上升沿还是下降沿触发。如果是上升沿就是if(a'event and a==1) then,下降沿就是if(a'event and a==0) then。
ic00 发表于 2009-11-28 17:38 | 显示全部楼层
如果有什么不明白可以加我的QQ,共同学习,QQ132 159 1335
ic00 发表于 2009-11-29 10:41 | 显示全部楼层
if(a'event and a==0) then。要改成if(a'event and a=‘1’) then。昨天打忙了
zhouskill 发表于 2009-12-18 16:44 | 显示全部楼层
A <= NOT B 就这样的一句话,非得加到process里干嘛?这是组合逻辑,如果要时钟锁存的话,那另加个CLK信号,数据信号用A'event and A= '1' 是不行的,因为数据信号很容易出现毛刺。
qjy_dali 发表于 2009-12-18 23:00 | 显示全部楼层
本帖最后由 qjy_dali 于 2009-12-18 23:03 编辑

ic00说到了一些,但是比较片面。对于大多数器件,直接写

if ( a 'event ) then

是错误的,因为绝大多数器件都不支持双边沿触发。但是有支持的,比如Xilinx的CoolRunner-II系列就支持双边沿触发,所以,在ISE中,当选择的器件是CoolRunner-II时,上面这条语句就不会出错。

我也曾试着把这个放到Altera的MAX-II下测试,立马报错。
yanj121 发表于 2010-2-9 16:24 | 显示全部楼层
把边沿改了
huang8033 发表于 2010-3-4 15:43 | 显示全部楼层
if语句是顺序语句,在architecture 中不是要用并行语句的吗?这样写行吗???
kevin04021101 发表于 2010-3-4 23:37 | 显示全部楼层
我觉得6楼说的有道理,a的跳变时刻,取反,这在数字电路中会出现冒险吧~ 最好引入时钟信号 if(clk'event and clk='1') then
onmyway12 发表于 2010-3-12 21:36 | 显示全部楼层
after不能乱用的。。。
消失在冬季 发表于 2010-4-5 21:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部