怎样编写约翰逊计数器
这是参照例程,自己写的代码!但发现很不稳定,尤其是按键的检测!有时要按很久才能检测到按键,有时根本就检测不了!
module johncount(
clk,rst_n,
key,led);
input clk,rst_n;
input key;
outputled;
reg cnt;
always @(posedge clk or negedge rst_n)//计数
if(!rst_n) cnt <= 24'b0;
else cnt <= cnt +1'b1;
reg key_low;
always @(posedge clk or negedge rst_n)//第一个时钟周期锁存一次key的值
if(!rst_n) key_low <= 3'b111;
else if(cnt == 24'hfffff)
key_low <= key;
reg key_low_r;
always @(posedge clk or negedge rst_n)//第二个时钟周期锁存一次key的值
if(!rst_n) key_low_r <= 3'b111;
else key_low_r <= key_low;
wire key_scan = key_low_r&(~key_low);//边缘检测哪个按键按下
reg start_move,led_right;
always @(posedge clk or negedge rst_n)
if(!rst_n)
begin
start_move <= 1'b1;
led_right <= 1'b1;
end
else if(key_scan) start_move <= ~start_move ;
else if(key_scan) led_right <= 1'b1;
else if(key_scan) led_right <= 1'b0;
reg led_vaul;
always @(posedge clk or negedge rst_n)
if(!rst_n) led_vaul <=4'b1110;
else if(cnt == 24'h1fffff && start_move)
case (led_right)
1'b1: led_vaul<={led_vaul,led_vaul};
1'b0: led_vaul<={led_vaul,led_vaul};
endcase
assign led = ~led_vaul;
endmodule 不懂,帮顶 EDN的CPLD/FPGA助学小组里面有这个计数器的源码
Google应该也有
这样的问题用Modelsim就应该能测试出来 回复【2楼】Jigsaw
edn的cpld/fpga助学小组里面有这个计数器的源码
google应该也有
这样的问题用modelsim就应该能测试出来
-----------------------------------------------------------------------
这个就是小组里的代码 ..................
建议楼主看我最近写的笔记吧 ...
先掌握建模基础那 ... 不然代码风格很糟糕 回复【4楼】akuei2 回家阿贵猪
-----------------------------------------------------------------------
我找不到你 啊》》》???给个链接!!
页:
[1]