上电后,用于显示采样
数据的8个led灯先全亮,然后最高位灭,下来全灭。
程序是这样的——
module amyad(clk,din,clk_ad,cs,dout);
input clk;
input din;
output clk_ad;
output reg cs;
output reg [7:0]dout;
reg [5:0]cnt_fre;
reg clk1M;
reg attach;
reg [4:0]cnt_ad;
reg [7:0]temp;
parameter period_fre = 6'd49;
parameter period_ad = 5'd27;
always@(negedge clk)
if(cnt_fre != period_fre) begin
cnt_fre <= cnt_fre + 6'd1;
clk1M <= 1'b0; end
else begin cnt_fre <= 5'd0;
clk1M <= 1'b1; end
always@(negedge clk)
if(clk1M)begin
if(cnt_ad != period_ad)
cnt_ad <= cnt_ad + 5'd1;
else cnt_ad <= 5'd0; end
always@(negedge clk)
if(clk1M)begin
if(cnt_ad >= 5'd20 && cnt_ad <= 5'd27)
attach <= 1'b1;
else attach <= 1'b0; end
assign clk_ad = (attach && clk1M);
always@(negedge clk)
if(clk1M)
case(cnt_ad)
5'd0: cs <= 1'b1;
5'd1: dout <= temp;
5'd18: cs <= 1'b0;
5'd20: temp[7] <= din;
5'd21: temp[6] <= din;
5'd22: temp[5] <= din;
5'd23: temp[4] <= din;
5'd24: temp[3] <= din;
5'd25: temp[2] <= din;
5'd26: temp[1] <= din;
5'd27: temp[0] <= din;
endcase
endmodule
高手们,
指点一下吧!谢谢!
此帖出自
小平头技术问答
能把你这个采集程序的作用说清楚一点吗?从程序上看,感觉的设计很乱,不知道要干啥?
第1个always语句,对输入的50M时钟分频,得到的1M时钟备用。
第2个always语句,按1M时钟为节奏计数。
第3个always语句,在必要的计数区间,生成需要1M时钟的标志。
assign语句,将1M时钟与标志相与,输出给AD作时钟。
第4个always语句,在不同的计数点控制片选、中间量输出以及把AD的串行输入分别赋给中间量的各位。
思路是多么的清晰,步伐是多么的有条不紊!哈哈!
国庆期间已经通过硬件验证,稍后给大家共享共享(如果有人感兴趣)。
[ 本帖最后由 andyandy 于 2010-10-11 16:02 编辑 ]一周热门 更多>