学习板上的晶振是50M,AD是TLC549。我想把549采到的数通过led
输出显示。
程序如下:
module amyad(clk,din,clk_ad,cs,dout);
input clk; //50MHz
input din;
output clk_ad;
output reg cs;
output reg [7:0]dout;
reg [4:0]cnt_fre;
reg clk1M = 1'b0;
reg attach;
reg [4:0]cnt_ad;
reg [7:0]temp;
parameter period_fre = 5'd24;
parameter period_ad = 5'd27;
always@(negedge clk)
if(cnt_fre != period_fre)
cnt_fre <= cnt_fre + 5'd1;
else begin cnt_fre <= 5'd0;
clk1M <= !clk1M; end
always@(negedge clk1M)
if(cnt_ad != period_ad)
cnt_ad <= cnt_ad + 5'd1;
else cnt_ad <= 5'd0;
always@(negedge clk1M)
if(cnt_ad >= 5'd20 && cnt_ad <= 5'd27)
attach <= 1'b1;
else attach <= 1'b0;
assign clk_ad = (attach && clk1M);
always@(negedge 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
功能仿真正常。
编译时,时序分析好像说从cnt_fre[4]到clk1M的
时钟延迟大于
数据延迟,可能不工作。
要是用PLL而不是程序中的计数分频,是不是好些。我的片子可是cyclone2 的EP2C8,对于这样的小工程,应该默认就能轻松搞定的呀。
高手指点一下吧!先谢过!
此帖出自
小平头技术问答
楼主上兄弟,你这样的小工程确实没有必要用PLL,浪费资源!轻松用程序分频可以搞定。你搞不定的原因在于设计没有采用全同步,用分频时钟作D触发器时钟信号。
3Q!
一周热门 更多>