HDL
发表于 2010-6-28 10:27:59
为什么我在使用wait 语句时老是不认呢?
VVC
发表于 2010-6-28 12:00:16
是用for语句吧!!!
interi
发表于 2010-6-28 13:49:27
經過小弟向師長請教的結果:<br>
1.那裡不加else在modelsim裡面能夠正常的運作。<br>
2.wait不能用在實際的電路合成,如果大大要用延遲,可考慮用迴圈來消耗每單位的clk,以達到延遲目的。<br>
希望對大大有幫助。
CHANG
发表于 2010-6-28 14:32:13
呵呵<br>
赞一下楼主的及时总结精神<br>
但是你写的代码似乎不太好,风格不太好吧<br>
另外,你的问题也是很多人经常遇到的<br>
基本上也都有定论了<br>
在仿真测试的时候,延时等等都是可以用#等等来实现的<br>
但是要想综合成实际电路<br>
一般是用计数器计clk或者用状态机。<br>
而你那个else的问题我不知道你想问什么
ups
发表于 2010-6-28 15:29:30
俺用状态机又重新写了一个,晚上发上来,各位看一下
usd
发表于 2010-6-28 17:11:06
好
VVC
发表于 2010-6-28 18:34:18
//功能:采集10个数据,找出最大的和最小的数据<br>
<br>
//McuStart 单片机输入信号,要求FPGA开始工作<br>
//McuReset 复位AD0809<br>
<br>
//Write 开始AD0809转换<br>
//Read 读取AD0809转换结果<br>
//EOC AD0809是否转换完成标志<br>
//Data 0809数据口<br>
<br>
//我省略了0809de的ALE 和时钟输入 引脚 <br>
//只要不断有McuStart脉冲,就可以不断进行AD转换 ,不过脉冲周期长度要考虑<br>
module AD0809(McuStart, McuReset, Write, Read, EOC, Data, TempA);<br>
<br>
input Data;<br>
input McuStart, McuReset, EOC;<br>
<br>
output Write, Read ;<br>
output TempA;<br>
reg TempA;//, TempB; <br>
<br>
reg state, NextState;<br>
<br>
reg Write, Read, ALE;<br>
<br>
parameter state0 = 3'b000, state1 = 3'b001, state2 = 3'b011, state3= 3'b010, state4 = 3'b110, state5 = 3'b111;//, state6 = 3'b101;//状态编码<br>
<br>
always @(McuReset) //复位<br>
begin<br>
if(McuReset == 1'b0)<br>
begin<br>
state = state0;<br>
// Write = 0;<br>
// Read = 0;<br>
// ALE = 0;<br>
// TempA = 8b'00000000;<br>
// TempB = 8b'00000000;<br>
end <br>
else <br>
state = NextState;<br>
<br>
end<br>
<br>
always @(McuStart or EOC or state) <br>
begin<br>
<br>
case (state)<br>
state0:<br>
begin<br>
if(McuStart == 1'b0)<br>
NextState = state1;//state1: ALE = 1<br>
else<br>
NextState = state0; <br>
end<br>
<br>
state1:<br>
begin<br>
if(ALE == 1'b1)<br>
NextState = state2;//ALE = 0; WR = 1;<br>
else<br>
NextState = state0; <br>
end <br>
<br>
state2:<br>
begin<br>
if(Write == 1'b1)<br>
NextState = state3;//WR = 0;ADC start convert<br>
else<br>
NextState = state2; <br>
end <br>
<br>
state3:<br>
begin<br>
if(EOC == 1'b1)<br>
NextState = state4;//EOC = 1; AD convert have finished <br>
else<br>
NextState = state3;//EOC = 0,wait AD convert finish<br>
end<br>
<br>
state4:<br>
begin<br>
if(Read == 1'b1)<br>
NextState = state5; //RD = 1; <br>
else<br>
NextState = state4;<br>
end <br>
<br>
state5:<br>
begin<br>
if(Read == 1'b0)//AD转换结束<br>
NextState = state0;<br>
else<br>
NextState = state5; <br>
<br>
end <br>
<br>
default: NextState = state0;<br>
endcase<br>
<br>
<br>
end<br>
<br>
<br>
always @(state)<br>
begin<br>
case (state)<br>
state0: begin Write = 0; Read = 0; ALE = 0; end //起始状态<br>
state1: begin ALE = 1; end // <br>
state2: begin ALE = 0; Write = 1; end //<br>
state3: begin Write = 0; end<br>
state4: begin Read = 1; end<br>
<br>
state5: begin TempA = Data; Read = 0; end<br>
endcase<br>
end<br>
endmodule
ANG
发表于 2010-6-28 20:32:18
哎 我要好好学习
ngtim
发表于 2010-6-28 20:40:19
呵呵,我最近正在学FPGA控制,,哈哈,参考下~
ATA
发表于 2010-6-28 20:58:52
原帖由 ljmdiy 于 2007-1-31 14:27 发表<br>
用#+时间或者使用 always 语句实现自循环 以及使用 repeat 语句均可实现 <br>
例如# 10 Write = 0; wait, #,repeat都综合不了的,只能仿真时看看