HDLBits 系列(22) Shift register

举报
李锐博恩 发表于 2021/07/15 02:56:55 2021/07/15
【摘要】 目录 Shift register1 Shift register2   Shift register1 实现下面的电路: module top_module ( input clk, input resetn, // synchronous reset input in, output out); reg q1, q2, q3, q4; a...

目录

Shift register1

Shift register2


 

Shift register1

实现下面的电路:


  
  1. module top_module (
  2. input clk,
  3. input resetn, // synchronous reset
  4. input in,
  5. output out);
  6. reg q1, q2, q3, q4;
  7. always@(posedge clk) begin
  8. if(~resetn) begin
  9. q1 <= 0;
  10. q2 <= 0;
  11. q3 <= 0;
  12. q4 <= 0;
  13. end
  14. else begin
  15. q4 <= q3;
  16. q3 <= q2;
  17. q2 <= q1;
  18. q1 <= in;
  19. end
  20. end
  21. assign out = q4;
  22. endmodule

奇怪地是,既然是同步复位,为什么RTL图画的不符合,有点不严谨了哈。


Shift register2

Consider the n-bit shift register circuit shown below:

Write a top-level Verilog module (named top_module) for the shift register, assuming that n = 4. Instantiate four copies of your MUXDFF subcircuit in your top-level module. Assume that you are going to implement the circuit on the DE2 board.

  • Connect the R inputs to the SW switches,
  • clk to KEY[0],
  • E to KEY[1],
  • L to KEY[2], and
  • w to KEY[3].
  • Connect the outputs to the red lights LEDR[3:0].

先给出每一个子模块的设计:


  
  1. module MUXDFF (
  2. input clk,
  3. input w, R, E, L,
  4. output Q
  5. );
  6. //reg Q;
  7. wire mid1, mid2;
  8. assign mid1 = E ? w : Q;
  9. assign mid2 = L ? R : mid1;
  10. always@(posedge clk) begin
  11. Q <= mid2;
  12. end
  13. endmodule

通过例化子模块,得到顶层设计:


  
  1. module top_module (
  2. input [3:0] SW,
  3. input [3:0] KEY,
  4. output [3:0] LEDR
  5. ); //
  6. wire q4, q3, q2, q1;
  7. MUXDFF inst4(
  8. .clk(KEY[0]),
  9. .w(KEY[3]),
  10. .R(SW[3]),
  11. .E(KEY[1]),
  12. .L(KEY[2]),
  13. .Q(q4)
  14. );
  15. MUXDFF inst3(
  16. .clk(KEY[0]),
  17. .w(q4),
  18. .R(SW[2]),
  19. .E(KEY[1]),
  20. .L(KEY[2]),
  21. .Q(q3)
  22. );
  23. MUXDFF inst2(
  24. .clk(KEY[0]),
  25. .w(q3),
  26. .R(SW[1]),
  27. .E(KEY[1]),
  28. .L(KEY[2]),
  29. .Q(q2)
  30. );
  31. MUXDFF inst1(
  32. .clk(KEY[0]),
  33. .w(q2),
  34. .R(SW[0]),
  35. .E(KEY[1]),
  36. .L(KEY[2]),
  37. .Q(q1)
  38. );
  39. assign LEDR = {q4, q3, q2, q1};
  40. endmodule

 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/103279866

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。