ADC0809的FPGA驱动程序(verilog)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
module ADC0809_driver(clk_500kHz,rst_n,EOC,START,OE,ALE,ADDA,DATA,DATA_R);
input EOC,clk_500kHz,rst_n;
input[7:0] DATA;
output reg START,OE,ALE,ADDA;
output reg [7:0] DATA_R;
reg[4:0] CS,NS;
parameter
IDLE=5'b00001,
START_H=5'b00010,
START_L=5'b00100,
CHECK_END=5'b01000,
GET_DATA=5'b10000;
always @(posedge clk_500kHz)
case(CS)
IDLE:
NS=START_H;
START_H:
NS=START_L;
START_L:
NS=CHECK_END;
CHECK_END:
if(EOC)
NS=GET_DATA;
else
NS=CHECK_END;
GET_DATA:
NS=IDLE;
default:
NS=IDLE;
endcase
always @(posedge clk_500kHz)
if(!rst_n)
CS<=IDLE;
else
CS<=NS;
always @(posedge clk_500kHz)
case(NS)
IDLE:
begin
OE<=0;
START<=0;
ALE<=0;ADDA<=1;
end
START_H:
begin
OE<=0;
START<=1;
ALE<=1;
ADDA<=1;
end
START_L:
begin
OE<=0;
START<=0;
ALE<=1;
end
CHECK_END:
begin
OE<=0;
START<=0;
ALE<=0;
end
GET_DATA:
begin
OE<=1;
DATA_R<=DATA;
START<=0;
ALE<=0;
end
default:
begin
OE<=0;
START<=0;
ALE<=0;
ADDA<=0;
end
endcase
endmodule