打印

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

[复制链接]
3661|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

使用特权

评论回复
5
ic00| | 2009-11-29 10:41 | 只看该作者
if(a'event and a==0) then。要改成if(a'event and a=‘1’) then。昨天打忙了

使用特权

评论回复
6
zhouskill| | 2009-12-18 16:44 | 只看该作者
A <= NOT B 就这样的一句话,非得加到process里干嘛?这是组合逻辑,如果要时钟锁存的话,那另加个CLK信号,数据信号用A'event and A= '1' 是不行的,因为数据信号很容易出现毛刺。

使用特权

评论回复
7
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下测试,立马报错。

使用特权

评论回复
8
yanj121| | 2010-2-9 16:24 | 只看该作者
把边沿改了

使用特权

评论回复
9
huang8033| | 2010-3-4 15:43 | 只看该作者
if语句是顺序语句,在architecture 中不是要用并行语句的吗?这样写行吗???

使用特权

评论回复
10
kevin04021101| | 2010-3-4 23:37 | 只看该作者
我觉得6楼说的有道理,a的跳变时刻,取反,这在数字电路中会出现冒险吧~ 最好引入时钟信号 if(clk'event and clk='1') then

使用特权

评论回复
11
onmyway12| | 2010-3-12 21:36 | 只看该作者
after不能乱用的。。。

使用特权

评论回复
12
消失在冬季| | 2010-4-5 21:27 | 只看该作者
顶lS

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

1

粉丝