求助,帮看一下程序怎么改,谢谢!

[复制链接]
2128|1
 楼主| nss321 发表于 2007-4-9 20:37 | 显示全部楼层 |阅读模式
ST, logic, TE, ic, AN
现想实现如下功能:<br />输入有两个时钟信号:gate:1Hz方波,clk:40MHz;另一输入是使能信号:en。<br />输出:对40MHz方波进行分频输出方波:dataout。<br />要求:在en=1时,dataout=0;在en=0时,等gate的上升沿来时,dataout开始输出方波,以后等每个gate的上升沿对输出复位一次,使输出与gate的上升沿同步。<br />程序如下:<br />library&nbsp;IEEE;<br />use&nbsp;IEEE.STD_LOGIC_1164.ALL;<br />use&nbsp;IEEE.STD_LOGIC_ARITH.ALL;<br />use&nbsp;IEEE.STD_LOGIC_UNSIGNED.ALL;<br /><br />ENTITY&nbsp;KEYSCAN&nbsp;IS<br />&nbsp;&nbsp;&nbsp;PORT&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;IN&nbsp;std_logic;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;IN&nbsp;std_logic;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;en&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;IN&nbsp;std_logic;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataout&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;OUT&nbsp;std_logic);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />END&nbsp;KEYSCAN;<br /><br />ARCHITECTURE&nbsp;arch&nbsp;OF&nbsp;KEYSCAN&nbsp;IS<br />SIGNAL&nbsp;div_cnt&nbsp;:&nbsp;std_logic_vector(3&nbsp;downto&nbsp;0);<br />SIGNAL&nbsp;dataout_tmp&nbsp;:&nbsp;std_logic;&nbsp;&nbsp;&nbsp;<br />SIGNAL&nbsp;start&nbsp;:&nbsp;std_logic;&nbsp;<br />BEGIN<br /><br />dataout&lt=dataout_tmp;<br /><br />PROCESS(en,clk,gate)<br /><br />BEGIN&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;IF&nbsp;(en=&nbsp;'1')&nbsp;THEN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataout_tmp&lt='0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div_cnt&nbsp;&lt=&nbsp;&quot;0000&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&lt='1';<br />&nbsp;&nbsp;&nbsp;elsif(en=&nbsp;'0')&nbsp;then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(gate'EVENT&nbsp;AND&nbsp;gate&nbsp;=&nbsp;'1')&nbsp;THEN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataout_tmp&lt='1';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div_cnt&nbsp;&lt=&nbsp;&quot;0000&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&lt='0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />&nbsp;&nbsp;&nbsp;end&nbsp;if;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF(start&lt='0'&nbsp;and&nbsp;(clk'EVENT&nbsp;AND&nbsp;clk&nbsp;=&nbsp;'1'))then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;div_cnt&nbsp;&lt=&nbsp;div_cnt&nbsp;+&nbsp;1;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;(div_cnt=&quot;0111&quot;)&nbsp;THEN&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataout_tmp&lt='0';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ELSIF&nbsp;(div_cnt=&quot;1111&quot;)&nbsp;THEN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataout_tmp&lt='1';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;if;<br /><br />END&nbsp;PROCESS;<br />END&nbsp;arch;<br /><br />提示如下错误:<br /><br />怎么改正,请指点,谢谢!<br /><br />Error&nbsp;(10629):&nbsp;VHDL&nbsp;error&nbsp;at&nbsp;KEYSCAN.vhd(42):&nbsp;can't&nbsp;synthesize&nbsp;logic&nbsp;for&nbsp;statement&nbsp;with&nbsp;conditions&nbsp;that&nbsp;test&nbsp;for&nbsp;the&nbsp;edges&nbsp;of&nbsp;multiple&nbsp;clocks<br />
xilinxer 发表于 2007-4-11 13:45 | 显示全部楼层

hehe !

&nbsp;&nbsp;不要用双时钟!用一个快的时钟,检测慢的gate信号的上升沿!就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部