|
我是绝对新手,对FPGA感到茫然无助,感觉入门很难,还请各位高手指点。
我写了下面的代码。CLK设置为对应的芯片28引脚,接20M晶振。
我按照(1/20M)秒计算,即10M个周期为0.5S,而FFFFFH≈10M(D)。
下载到FPGA上,只见那灯狂闪。
于是乎我加了一个2位的TIME,每次FFFFFH时给TIME加1,加满4次后LED取反。
这样一来速度是慢了,依然没满到0.5秒闪一次的速度(目测)。
请问这一CLK的周期究竟怎么算?
module key(rst,clk,led1,led2,led3);
input rst,clk;
output led1,led2,led3;
/*每一CLK使KEY_count加1*/
reg[19:0] KEY_count;
always @(posedge clk or negedge rst)
if(!rst) KEY_count <= 0;
else KEY_count<= KEY_count + 1'b1;
/*KEY_count达到FFFFH时TIME加1*/
reg[1:0] TIME;
always @(posedge clk or negedge rst)
if(!rst) TIME=0;
else if(KEY_count == 20'hfffff) TIME=TIME+1;
/*每次TIME计满后将LED取反*/
reg d1,d2,d3;
always @(posedge clk or negedge rst)
if(!rst) begin
d1 <= 1;
d2 <= 0;
d3 <= 1;
end
else if(!TIME) begin
d1 <= ~d1;
d2 <= ~d2;
d3 <= ~d3;
end
/*更新LED*/
assign led1 = d1 ? 1'b1 : 1'b0;
assign led2 = d2 ? 1'b1 : 1'b0;
assign led3 = d3 ? 1'b1 : 1'b0;
endmodule |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|