当前位置:   article > 正文

HDLbits答案更新系列19(3.3 Building Larger Circuits 3.3.1 Counter with period 1000等)

HDLbits答案更新系列19(3.3 Building Larger Circuits 3.3.1 Counter with period 1000等)

目录

前言

3.3 Building Larger Circuits

3.3.1 Counter with period 1000(Exams/review2015 count1k)

3.3.2 4-bit shift register and down counter(Exams/review2015 shiftcount)

3.3.3 FSM:Sequence 1101 recognizer(Exams/review2015 fsmseq)

结语

HDLbits网站链接


前言

今天我们进入到新的一节,之前的计数器和状态机小节已经搞定了,这一节我们将会用这些基础模块搭建更大的系统,下面我们就开始吧。

3.3 Building Larger Circuits

3.3.1 Counter with period 1000(Exams/review2015 count1k)

  1. module top_module (
  2. input clk,
  3. input reset,
  4. output [9:0] q);
  5. always@(posedge clk)begin
  6. if(reset == 1'b1)begin
  7. q <= 10'd0;
  8. end
  9. else if(q == 10'd999)begin
  10. q <= 10'd0;
  11. end
  12. else begin
  13. q <= q + 1'b1;
  14. end
  15. end
  16. endmodule

这道题是一个计数周期为1000的计数器,只需在计数到999的时候清零即可,没有难度。

3.3.2 4-bit shift register and down counter(Exams/review2015 shiftcount)

  1. module top_module (
  2. input clk,
  3. input shift_ena,
  4. input count_ena,
  5. input data,
  6. output [3:0] q);
  7. always@(posedge clk)begin
  8. case({shift_ena, count_ena})
  9. 2'b10:begin
  10. q <= {q[2:0], data};
  11. end
  12. 2'b01:begin
  13. q <= q - 1'b1;
  14. end
  15. endcase
  16. end
  17. /*
  18. //second way
  19. always@(posedge clk)begin
  20. if(shift_ena)begin
  21. q <= {q[2:0], data};
  22. end
  23. else if(count_ena)begin
  24. q <= q - 1'b1;
  25. end
  26. end
  27. */
  28. endmodule

题目说实现一个4bit移位寄存器,该寄存器还可以做递减计数器,当shift_ena有效时,数据开始循环移位,当count_ena为1时,该移位寄存器做递减器。题目特意说明这两个信号不会同时为1,博主给出两种方法,大家看一看就好。

3.3.3 FSM:Sequence 1101 recognizer(Exams/review2015 fsmseq)

  1. module top_module (
  2. input clk,
  3. input reset, // Synchronous reset
  4. input data,
  5. output start_shifting);
  6. parameter S0 = 3'd0, S1 = 3'd1, S2 = 3'd2, S3 = 3'd3, S4 = 3'd4;
  7. reg [2:0] current_state;
  8. reg [2:0] next_state;
  9. always@(posedge clk)begin
  10. if(reset)begin
  11. current_state <= S0;
  12. end
  13. else begin
  14. current_state <= next_state;
  15. end
  16. end
  17. always@(*)begin
  18. case(current_state)
  19. S0:begin
  20. next_state = data ? S1 : S0;
  21. end
  22. S1:begin
  23. next_state = data ? S2 : S0;
  24. end
  25. S2:begin
  26. next_state = data ? S2 : S3;
  27. end
  28. S3:begin
  29. next_state = data ? S4 : S0;
  30. end
  31. S4:begin
  32. next_state = S4;
  33. end
  34. default:begin
  35. next_state = S0;
  36. end
  37. endcase
  38. end
  39. always@(posedge clk)begin
  40. if(reset)begin
  41. start_shifting <= 1'b0;
  42. end
  43. else if(next_state == S4)begin
  44. start_shifting <= 1'b1;
  45. end
  46. end
  47. //assign start_shifting = current_state == S4;
  48. endmodule

超级经典的序列检测,大家一定要多多练习,简直是笔试经典题目了。

结语

今天更新这三道题目吧,第三道尤其要注意,真的是太经典了,各种面试笔试题中都会出现,大家一定要认真去做一做。如果有哪里代码有问题,欢迎随时指出哦~

HDLbits网站链接

https://hdlbits.01xz.net/wiki/Main_Page

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/648817
推荐阅读
相关标签
  

闽ICP备14008679号