VHDL语言Process

FPGA编程, VHDL语言, 芯片ALTERA Cyclone EP1C60240C8, UP3-1C6实验板, Quartus II.

VHDL语言中一般定义一个Entity, Entity中定义引脚之类的与其他模块交互的接口. 一个Entity可能对应N个Architecture, 并且具体的对应可以定义Configuration进行配置.

一个Architecture可以包含多个Process, 这些Process是并行的, Process由其后括包里的任一Signal触发, 触发点是在这个Process结尾的End Process处, 也就是在程序运行完即运行到End Process了才能被触发, 这就保证了一个过程被运行完 (Process也可以由其包含的 Wait 语句触发, 此时触发点在 Wait 语句处). 各Process之间的数据传递由Architecture头部声明的Signal传递, 而对Signal的赋值一般用>=进行, 个人的理解是这个赋值允许延迟, 即没执行完便执行下一个语句, 但它会尽量早的执行. 赋值语句若要立即执行需用:=, 一般Variable变量都这样赋值.

如果在不同进程中对同一信号量进行赋值, 就会出现如下错误(Quartus II), 因为两处赋值由于是同步的, 会冲突:

Error: Can't resolve multiple constant drivers for net  " SHOW_MODE[3] "  at UP3_CLOCK.vhd( 462 )
Error: Constant driver at UP3_CLOCK.vhd(
498 )
Error: Can't elaborate top-level user hierarchy
Error: Quartus II Analysis & Synthesis was unsuccessful. 
3  errors ,   6  warnings
    Error: Processing ended: Sun Sep 
03   11 : 16 : 41   2006
    Error: Elapsed time: 
00 : 00 : 02
Error: Quartus II Full Compilation was unsuccessful. 
3  errors ,   6  warnings

代码如:

SIGNAL SHOW_MODE: STD_LOGIC_VECTOR( 3  DOWNTO  0 );

PROCESS (MODE_SWITCH)
BEGIN
    SHOW_MODE 
<=  X " 1 " ;
END PROCESS;

PROCESS (MODE_SWITCH)
BEGIN
    SHOW_MODE 
<=  X " 0 " ;
END PROCESS;

有的时候两个Process要同步, 只要在一个Process中加一个Signal, 比如:sig <= NOT sig; 再由sig触发另一个Process即可.

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值