verilog来分析下啊
ENTITY MYFPGA ISPORT( CLK: INSTD_LOGIC;
TRAG: IN STD_LOGIC;
TRAGOUT: BUFFERSTD_LOGIC);
END;
ARCHITECTURE BHV OF MYFPGA IS
BEGIN
PROCESS(CLK,TRAG,TRAGOUT)
VARIABLE CNT:INTEGER range 0 to 10 := 0;
BEGIN
IF RISING_EDGE(TRAG) THEN TRAGOUT <= '1';
END IF;
IF FALLING_EDGE(CLK) AND TRAGOUT = '1' THEN CNT := CNT + 1;
IF CNT > 9 THEN CNT := 0; TRAGOUT <= '0';
END IF;
END IF;
END PROCESS;
END;
实现的功能是当TRAG上升沿触发TRAGOUT输出10个clk的高电平。下面的话我是不大明白大家来看下啊,解释下啊!
;----------------------------------------------------------------------------------
在触发沿内部放个if语句是不能被综合的。
这个电路是不可能实现的,你要不用电路图画一个就知道了。 不太懂vhdl,但对楼主的设计意图还是很了解的。<br>
至于“在触发沿内部放个if语句是不能被综合的。”,不清楚vhdl里面的情况,但至少使用verilog<br>
实现时是很正常的使用,绝不存在不可综合的现象。 没有问题,Q II是可以综合的,不过LZ的编码风格确实不大合乎规范. 谢谢大家,这个代码我也是拿人家的来讨论的,我也看的很吃力~~~但确实在MAXPLUSII编译通不过啊!!我改了也通不过~~`<br>
LIBRARY IEEE;<br>
USE IEEE.STD_LOGIC_1164.ALL; <br>
------------------------------------------<br>
ENTITY MYFPGA IS<br>
PORT( CLK : IN STD_LOGIC;<br>
TRAG: IN STD_LOGIC;<br>
TRAGOUT: BUFFER STD_LOGIC);<br>
END;<br>
<br>
ARCHITECTURE BHV OF MYFPGA IS<br>
SIGNAL T_OUT:STD_LOGIC;<br>
BEGIN<br>
PROCESS(CLK,TRAG,TRAGOUT)<br>
BEGIN<br>
IF TRAG'EVENT AND TRAG='1' THEN T_OUT <= '1'; <br>
END IF;<br>
END PROCESS;<br>
-----------------------------------------------<br>
PROCESS(T_OUT,CLK)<br>
VARIABLE CNT:INTEGER range 0 to 10 := 0;<br>
BEGIN<br>
IF CLK'EVENT AND CLK='0' AND T_OUT = '1' THEN <br>
IF CNT = 10 THEN <br>
CNT := 0; TRAGOUT <= '0'; <br>
ELSE CNT := CNT + 1;<br>
END IF;<br>
END IF;<br>
END PROCESS; <br>
TRAGOUT<=T_OUT;<br>
END; 大家给我改下啊~~~~~ 你进程里的时钟源太多了吧,改少点应该就可以了<br>
试试这样可以吗<br>
<br>
library ieee;<br>
use ieee.std_logic_1164.all;<br>
use ieee.std_logic_unsigned.all;<br>
<br>
ENTITY myfpga IS<br>
PORT( CLK : IN STD_LOGIC;<br>
TRAG: IN STD_LOGIC;<br>
TRAG_OUT: out STD_LOGIC);<br>
END;<br>
<br>
ARCHITECTURE art OF fo IS<br>
begin<br>
PROCESS(TRAG,CLK)<br>
VARIABLE CNT:INTEGER range 0 to 10 := 0;<br>
BEGIN<br>
IF TRAG='0' THEN<br>
CNT:=0;<br>
TRAG_OUT<='0';<br>
ELSIF RISING_EDGE(CLK) THEN<br>
IF CNT>9 THEN<br>
TRAG_OUT<='0';<br>
<br>
ELSE <br>
CNT:=CNT+1;<br>
TRAG_OUT<='1';<br>
END IF;<br>
END IF;<br>
END PROCESS; <br>
END; 不知道,学习中 确实不能综合<br>
<br>
我用ISE去综合,得到的是这个结果<br>
<br>
Signal TRAGOUT cannot be synthesized, bad synchronous description. 研究下!!! 谢谢大家了~~~
页:
[1]
2