Cyclone2 FPGA读写 ADC_TLC549实验Verilog逻辑源码Quartus工程文件,
module AD_TLC549 (
//input
input sys_clk , //system clock;
input sys_rst_n , //system reset, low is active;
input AD_IO_DATA ,
//output
output reg AD_IO_CLK ,
output reg AD_CS ,
output reg [7:0] LED
);
//Reg define
reg [6:0] div_cnt ;
reg ad_clk ;
reg [4:0] ctrl_cnt ;
reg [7:0] ad_data_shift ;
//Wire define
//************************************************************************************
//** Main Program
//**
//************************************************************************************
// counter used for div osc clk to ad ctrl clk 50M/64 = 0.78Mhz
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0)
div_cnt <= 6'b0;
else
div_cnt <= div_cnt + 6'b1;
end
//gen ad_clk
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0)
ad_clk <= 1'b0 ;
else if ( div_cnt <= 6'd31 )
ad_clk <= 1'b1 ;
else
ad_clk <= 1'b0 ;
end
// ad ctrl signal gen
// ctrl_cnt 0 - 32is for ad ctrl
always @(posedge ad_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0)
ctrl_cnt <= 5'b0;
else
ctrl_cnt <= ctrl_cnt + 5'b1;
end
always @(posedge ad_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0)
AD_IO_CLK <= 1'b0;
else if ( ctrl_cnt == 5'd6 || ctrl_cnt == 5'd8 || ctrl_cnt == 5'd10
|| ctrl_cnt == 5'd12 || ctrl_cnt == 5'd14 || ctrl_cnt == 5'd16
|| ctrl_cnt == 5'd18 || ctrl_cnt == 5'd20 ) // ad clk low
AD_IO_CLK <= 1'b1;
else
AD_IO_CLK <= 1'b0;
end
always @(posedge ad_clk or negedge sys_rst