HDLBits在线编程题之Exams/review2015 fancytimer
2021/10/30 20:14:53
本文主要是介绍HDLBits在线编程题之Exams/review2015 fancytimer,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Exams/review2015 fancytimer
- 题目
- 代码
题目
地址:HDLBits-Exams/review2015 fancytimer
介绍:花了好长时间写的,记录一下。将计数值量化为以1000为单位,开始时则有delay的1000需要计数。在couting过程中统计已经计了1000次的次数num_1k,将delay减去num_1k即count。
代码
module top_module ( input clk, input reset, // Synchronous reset input data, output [3:0] count, output counting, output done, input ack ); parameter [2:0] IDLE=3'b000,DEC_1=3'b001,DEC_11=3'b010,DEC_110=3'b011,SHIFT=3'b100,COUNT=3'b101,WAIT=3'b110; reg [2:0] current_state,next_state; always @(posedge clk) begin if (reset) current_state <= IDLE; else current_state <= next_state; end always @(*) begin case (current_state) IDLE: next_state = data?DEC_1:IDLE; DEC_1: next_state = data?DEC_11:IDLE; DEC_11: next_state = data?DEC_11:DEC_110; DEC_110: next_state = data?SHIFT:IDLE; SHIFT: next_state = (shift_cnt==2'b11)?COUNT:SHIFT; COUNT: next_state = (counter==(delay+1)*1000-1)?WAIT:COUNT; WAIT: next_state = (done&&ack)?IDLE:WAIT; default: next_state = IDLE; endcase end reg [1:0] shift_cnt; reg [3:0] delay; always @(posedge clk) begin if (reset) shift_cnt <= 2'b0; else if (current_state==SHIFT&&shift_cnt!=2'b11) shift_cnt <= shift_cnt+1'b1; else shift_cnt <= 2'b0; end always @(posedge clk) begin if (reset) delay <= 4'b0; else if (current_state==SHIFT) delay <= {delay[2:0],data}; else delay <= delay; end reg [14:0] counter; always @(posedge clk) begin if (reset) counter <= 15'd0; else if (current_state==COUNT&&counter!=(delay+1)*1000-1) counter <= counter+1'b1; else counter <= 15'd0; end reg [10:0] cnt_1k; reg [3:0] num_1k; always @(posedge clk) begin if (reset) cnt_1k <= 11'd0; else if (current_state==COUNT&&cnt_1k!=11'd999) cnt_1k <= cnt_1k+1'b1; else cnt_1k <= 11'd0; end always @(posedge clk) begin if (reset) num_1k <= 4'b0; else if (cnt_1k==11'd999) num_1k <= num_1k+1'b1; else if (current_state==COUNT) num_1k <= num_1k; else num_1k <= 4'b0; end assign counting = (current_state==COUNT)?1'b1:1'b0; assign done = (current_state==WAIT)?1'b1:1'b0; assign count = (current_state==COUNT)?(delay-num_1k):4'b0; endmodule
这篇关于HDLBits在线编程题之Exams/review2015 fancytimer的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享