fpga控制0809
//功能:采集数据,找出最大的数据//McuStart单片机输入信号,要求FPGA开始工作
//McuReset复位AD0809
//Write 开始AD0809转换
//Read读取AD0809转换结果
//EOCAD0809是否转换完成标志
//Data0809数据口
//我省略了0809de的ALE 和时钟输入 引脚
//只要不断有McuStart脉冲,就可以不断进行AD转换,不过脉冲周期长度要考虑
moduleAD0809(McuStart, McuReset, Write, Read, EOC, Data);
inputData;
inputMcuStart,McuReset, EOC;
outputWrite, Read;
reg TempA, TempB;
always @(negedge McuReset) //复位
begin
if(McuReset == 1'b0)
begin
Write = 0;
Read= 0;
//ALE= 0;
//TempA = 8b'00000000;
//TempB = 8b'00000000;
end
//else这里不加else,不知是否有问题?
end
always @(negedge McuStart)//
begin
if((McuStart == 1'b0) && (McuReset == 1'b0) && (EOC ==1) )//
begin
Write = 1;//
Read= 0;
Write = 0;//产生一个写脉冲,0809开始转换
// 但是我想不出如何延时,以加宽脉冲?
end
end
always @(posedge EOC)
begin
if(EOC == 1'b1)
begin
Read = 1;
Write = 0;
Read = 0;// 产生一个读脉冲,这里也要加延时,不知如何加
TempA = Data;
if(TempA > TempB)
begin
TempB = TempA;
end
end
end
endmodule 用软件仿真下就知道是否可以不加 else 了<br>
延时个人觉得可以重复同样的语句来实现 不知大家意下如何? 在VHDL中有 wait 语句可以实现延时<br>
不知道 Verilog 是否也有这样的语句 楼主可以试试 延时可以用计数器或状态机实现 可不可以用wait那? 不可以用wait吧, wait是仿真的时候用的! 居然听到说用WAIT,如果WAIT可以的话,VERILOG里面就可以用#+时间来控制时间了。<br>
正确方法是:[广告]:用计数器或状态机实现,或者二者结合可以。 用计数器或状态机实现,或者二者结合可以。<br>
俺去研究了 用#+时间或者使用 always 语句实现自循环 以及使用 repeat 语句均可实现 <br>
例如# 10 Write = 0; 可以用状态机把