longtime 发表于 2010-6-27 23:58:36

verilog来分析下啊

ENTITY MYFPGA IS
PORT(    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语句是不能被综合的。

这个电路是不可能实现的,你要不用电路图画一个就知道了。

ngtim 发表于 2010-6-28 01:47:58

不太懂vhdl,但对楼主的设计意图还是很了解的。<br>
至于&ldquo;在触发沿内部放个if语句是不能被综合的。&rdquo;,不清楚vhdl里面的情况,但至少使用verilog<br>
实现时是很正常的使用,绝不存在不可综合的现象。

VVC 发表于 2010-6-28 03:14:41

没有问题,Q II是可以综合的,不过LZ的编码风格确实不大合乎规范.

ngtim 发表于 2010-6-28 04:37:15

谢谢大家,这个代码我也是拿人家的来讨论的,我也看的很吃力~~~但确实在MAXPLUSII编译通不过啊!!我改了也通不过~~`<br>
LIBRARY IEEE;<br>
USE IEEE.STD_LOGIC_1164.ALL; <br>
------------------------------------------<br>
ENTITY MYFPGA IS<br>
&nbsp; &nbsp; PORT(&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;CLK&nbsp;&nbsp;:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;IN&nbsp;&nbsp;STD_LOGIC;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;TRAG:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;IN&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;STD_LOGIC;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;TRAGOUT:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;BUFFER&nbsp;&nbsp;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 &lt;= '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>
&nbsp;&nbsp;IF CNT = 10 THEN <br>
&nbsp;&nbsp;CNT := 0; TRAGOUT &lt;= '0'; <br>
&nbsp;&nbsp;ELSE CNT := CNT + 1;<br>
END IF;<br>
END IF;<br>
END PROCESS; <br>
TRAGOUT&lt;=T_OUT;<br>
END;

VVIC 发表于 2010-6-28 05:45:15

大家给我改下啊~~~~~

longtim 发表于 2010-6-28 07:07:20

你进程里的时钟源太多了吧,改少点应该就可以了<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>
&nbsp; &nbsp; PORT(&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;CLK&nbsp;&nbsp;:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;IN&nbsp;&nbsp;STD_LOGIC;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;TRAG:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;IN&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;STD_LOGIC;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; TRAG_OUT:&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;out&nbsp;&nbsp;STD_LOGIC);<br>
END;<br>
<br>
ARCHITECTURE art OF fo IS<br>
begin<br>
PROCESS(TRAG,CLK)<br>
&nbsp;&nbsp;VARIABLE CNT:INTEGER range 0 to 10 := 0;<br>
&nbsp;&nbsp;BEGIN<br>
&nbsp; &nbsp;IF TRAG='0' THEN<br>
&nbsp; &nbsp;&nbsp; &nbsp;CNT:=0;<br>
&nbsp; &nbsp;&nbsp; &nbsp;TRAG_OUT&lt;='0';<br>
&nbsp; &nbsp;ELSIF RISING_EDGE(CLK) THEN<br>
&nbsp; &nbsp;&nbsp;&nbsp;IF CNT&gt;9 THEN<br>
&nbsp; &nbsp;&nbsp; &nbsp; TRAG_OUT&lt;='0';<br>
<br>
&nbsp; &nbsp;&nbsp;&nbsp;ELSE <br>
&nbsp; &nbsp;&nbsp; &nbsp; CNT:=CNT+1;<br>
&nbsp; &nbsp;&nbsp; &nbsp; TRAG_OUT&lt;='1';<br>
&nbsp; &nbsp;&nbsp;&nbsp;END IF;<br>
&nbsp; &nbsp;END IF;<br>
&nbsp;&nbsp;END PROCESS; <br>
END;

UFP 发表于 2010-6-28 07:19:07

不知道,学习中

HDL 发表于 2010-6-28 07:46:09

确实不能综合<br>
<br>
我用ISE去综合,得到的是这个结果<br>
<br>
Signal TRAGOUT cannot be synthesized, bad synchronous description.

UFP 发表于 2010-6-28 09:45:20

研究下!!!

CTT 发表于 2010-6-28 11:08:09

谢谢大家了~~~
页: [1] 2
查看完整版本: verilog来分析下啊