首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教一个交通灯VHDL程序的问题。

请教一个交通灯VHDL程序的问题。

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY tranlit IS PORT(ala,resert:IN STD_LOGIC; r1,r2,g1,g2,y1,y2:OUT STD_LOGIC); END tranlit; ARCHITECTURE behav OF tranlit IS SIGNAL f,k:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL flag:STD_LOGIC; --SIGNAL k:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN flag<='1'; aROCESS(ala,resert) BEGIN IF(ala='1') THEN f<="000"; END IF; --END PROCESS a; --bROCESS(resert) --BEGIN IF(resert='1') THEN f<="001"; END IF; END PROCESS a; cROCESS(f) BEGIN k<=f; CASE k IS WHEN "000"=>r1<='1';r2<='1';g1<='0';g2<='0';y1<='0';y2<='0'; WHEN "001"=>r1<='1';r2<='0';g1<='0';g2<='1';y1<='0';y2<='0'; WHEN "010"=>r1<='1';r2<='0';g1<='0';g2<='0';y1<='1';y2<='0'; WHEN "011"=>r1<='0';r2<='0';g1<='0';g2<='0';y1<='1';y2<='1'; WHEN "100"=>r1<='0';r2<='1';g1<='0';g2<='0';y1<='1';y2<='0'; WHEN "101"=>r1<='0';r2<='1';g1<='1';g2<='0';y1<='0';y2<='0'; WHEN OTHERS=> r1<='0';r2<='0';g1<='0';g2<='0';y1<='0';y2<='0'; END CASE; IF(k="101") THEN flag<='0'; END IF; IF(flag='1') THEN IF(k="001") THEN k<=k+1;--AFTER 10S; ELSE k<=k+1;--AFTER 2S; END IF; ELSE IF(k="101") THEN k<=k-1 ;--AFTER 10S; ELSE k<=k-1 ;--AFTER 2S; END IF; END IF; f<=k; END PROCESS c; END behav; 是一个交通灯的程序。报错为: Error: Line 13: File c:\maxplus2\tranlit.vhd: Signal "f" has multiple sources Error: Line 14: File c:\maxplus2\tranlit.vhd: Signal "flag" has multiple sources 前面本来还有几个警告,我觉得大概是在顺序结构中带并发行为,所以只有最后一句生效。但是这两个错误怎么回事我就茫然了。请各位前辈指点! [em01][em01]
既然你都决定了,既然是你自己决定的,那能为它奋斗至死不正是你想要的吗?
ToT 我要晕了,那个问题解决了这个问题又冒出来!我改后的程序中有一句
WHILE (f/="000") LOOP
编译时报错:
Error: Line 29: File c:\maxplus2\tranlit2.vhd: Unsupported feature error: Loops other thaWHILE (f/="000") LOOP
n 'for loops' are not supported; at line 29 in file 'c:\maxplus2\tranlit2.vhd'
可是为什么呢?书上明明有这种语句啊!请高手不吝赐教!
既然你都决定了,既然是你自己决定的,那能为它奋斗至死不正是你想要的吗?
兄弟我也是做交通灯 可我也不会
我也是做交通灯的,谁能帮我把这段源程序弄出来
在设特殊情况下手动功能:道路戒严(主干道都不允许通行)
谢谢了
一个信号量(f)不可以在多个进程中进行写操作。
试着用别的量来替代
一个process块内部语句是顺序执行,但对外整个可以看成是一条并发语句,process块与process块以及其它concurrent语句之间是并发关系。如dsp_zfg所说,signal不可在几个并发语句里同时被赋值,也是为什么错误提示说你的信号有多个源。想办法把对f和flag的赋值放到一个process里问题就解决了。
sorry,光看最后跟贴时间,忘看发贴时间了。不好意思。
返回列表