|
我的24M晶振,用多少分频可以得到AD0809说需要的时钟了,一般是500k吧。还有这是我的verilog代码,欢迎大家指教啊。我测试好像不对哦
//==========ADC0809 -m采集数据 状态机============================
parameter st0 = 3'b000;
parameter st1 = 3'b001;
parameter st2 = 3'b010;
parameter st3 = 3'b011;
parameter st4 = 3'b100;
parameter st5 = 3'b101;
reg[2:0] state,next_state;
reg oe,start,lock;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)begin
state<=0;
end
else begin
state<=next_state;
end
end
reg [1:0] cnt;//定义一个2位的计数器,如果我用的25M的晶振。那么时钟周期就是40ns。计数4次就至少有100ns的高电平啦
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)begin
cnt<=2'b0;
end
else begin
cnt<=cnt+1'b1;
end
end
always@(state or eoc)
begin
case(state)
st0:begin
start<=0;
oe<=0;
lock<=0;
next_state<=st1;
end
st1:begin
start<=1;
oe<=0;
lock<=0;
if(cnt==2'b11)begin//分频计数使start 维持至少100ns,仿真结果是120ns
next_state<=st2;
end
else begin
next_state<=st1;
end
end
st2:begin
start<=0;
oe<=0;
lock<=0;
next_state<=st3;
end
st3:begin
start<=0;
oe<=0;
lock<=0;
if(eoc==0)
next_state<=st3;
else
next_state<=st4;
end
st4:begin
start<=0;
oe<=1;
lock<=1;
next_state<=st5;
end
st5:begin
start<=0;
oe<=1;
lock<=1;
next_state<=st0;
end
default:begin
start<=0;
oe<=0;
lock<=0;
next_state<=st0;
end
endcase
end
reg[7:0]m1;
always @(posedge lock)
begin
m1<=m;
end
reg[2:0] cba_r;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
cba_r<=0;
else
cba_r<=3'b011;
end
assign cba=cba_r;
//======================================================== |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|