ICE 发表于 2010-6-27 23:52:45

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

ICE 发表于 2010-6-28 01:49:57

用软件仿真下就知道是否可以不加&nbsp;&nbsp;else 了<br>
  延时个人觉得可以重复同样的语句来实现  不知大家意下如何?

HANG 发表于 2010-6-28 02:19:13

在VHDL中有 wait 语句可以实现延时<br>
  不知道 Verilog&nbsp;&nbsp;是否也有这样的语句 楼主可以试试

CCIE 发表于 2010-6-28 02:44:23

延时可以用计数器或状态机实现

ANG 发表于 2010-6-28 03:26:00

可不可以用wait那?

longt 发表于 2010-6-28 03:50:55

不可以用wait吧, wait是仿真的时候用的!

FFT 发表于 2010-6-28 05:26:28

居然听到说用WAIT,如果WAIT可以的话,VERILOG里面就可以用#+时间来控制时间了。<br>
正确方法是:[广告]:用计数器或状态机实现,或者二者结合可以。

usd 发表于 2010-6-28 07:18:39

用计数器或状态机实现,或者二者结合可以。<br>
俺去研究了

usb 发表于 2010-6-28 08:13:24

用#+时间或者使用 always 语句实现自循环 以及使用 repeat 语句均可实现 <br>
&nbsp; &nbsp;例如# 10 Write = 0;

CCIE 发表于 2010-6-28 09:21:46

可以用状态机把
页: [1] 2 3
查看完整版本: fpga控制0809