• 北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595(仿真方法验证)


    北邮22信通一枚~

    跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章

    持续关注作者 迎接数电实验学习~

    获取更多文章,请访问专栏:

    北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客

     

     使用FPGA开发板验证的教程,请参考

    北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595-CSDN博客

    本篇博客主要以modelsim仿真的方法验证74LS595移位寄存器的功能。

    目录

    一.代码部分

    1.1  shift_register.v

    1.2  dtri.v

    1.3  dtri_n_g.v

    1.4  shift_register_tb.v

    二.仿真验证结果


     

    一.代码部分

    1.1  shift_register.v

    主程序。

    1. module shift_register
    2. (
    3. input SCK,SI,SCLR,RCK,G,
    4. output wire QA,QB,QC,QD,QE,QF,QG,QH,QH_s
    5. );
    6. wire RA,RB,RC,RD,RE,RF,RG,RH,RH_n;
    7. wire SA,SB,SC,SD,SE,SF,SG,SH;
    8. dtri Ra(.clk(SCK),.rst(SCLR),.d(SI),.q(RA));
    9. dtri Rb(.clk(SCK),.rst(SCLR),.d(RA),.q(RB));
    10. dtri Rc(.clk(SCK),.rst(SCLR),.d(RB),.q(RC));
    11. dtri Rd(.clk(SCK),.rst(SCLR),.d(RC),.q(RD));
    12. dtri Re(.clk(SCK),.rst(SCLR),.d(RD),.q(RE));
    13. dtri Rf(.clk(SCK),.rst(SCLR),.d(RE),.q(RF));
    14. dtri Rg(.clk(SCK),.rst(SCLR),.d(RF),.q(RG));
    15. dtri Rh(.clk(SCK),.rst(SCLR),.d(RG),.q(RH));
    16. assign RH_n = ~RH;
    17. assign QH_s = ~RH_n;
    18. dtri_n_g Qa(.clk(RCK),.d(RA),.g(G),.qb(SA),.qq(QA));
    19. dtri_n_g Qb(.clk(RCK),.d(RB),.g(G),.qb(SB),.qq(QB));
    20. dtri_n_g Qc(.clk(RCK),.d(RC),.g(G),.qb(SC),.qq(QC));
    21. dtri_n_g Qd(.clk(RCK),.d(RD),.g(G),.qb(SD),.qq(QD));
    22. dtri_n_g Qe(.clk(RCK),.d(RE),.g(G),.qb(SE),.qq(QE));
    23. dtri_n_g Qf(.clk(RCK),.d(RF),.g(G),.qb(SF),.qq(QF));
    24. dtri_n_g Qg(.clk(RCK),.d(RG),.g(G),.qb(SG),.qq(QG));
    25. dtri_n_g Qh(.clk(RCK),.d(RH),.g(G),.qb(SH),.qq(QH));
    26. endmodule

    1.2  dtri.v

    输出为Q的D触发器。

    1. module dtri
    2. (
    3. input clk,rst,d,
    4. output wire q
    5. );
    6. reg q1;
    7. always @ (posedge clk)
    8. if(!rst)
    9. q1 <= 1'b0;
    10. else
    11. q1 <= d;
    12. assign q = q1;
    13. endmodule

    1.3  dtri_n_g.v

    输出为~Q的D触发器。

    1. module dtri_n_g
    2. (
    3. input clk,d,g,
    4. output wire qb,qq
    5. );
    6. reg q1,q2;
    7. always @ (posedge clk)
    8. begin q1 <= ~d; end
    9. assign qb = q1;
    10. always @ (*)
    11. begin
    12. if(g) q2 <= 1'b0;
    13. else q2 = ~q1;
    14. end
    15. assign qq = q2;
    16. endmodule

    1.4  shift_register_tb.v

    仿真程序。

    1. `timescale 1ns/100ps
    2. module shift_register_tb();
    3. reg SCK,SI,RCK,SCLR,G;
    4. wire QA,QB,QC,QD,QE,QF,QG,QH,QH_s;
    5. initial
    6. begin
    7. SCK=0;
    8. SI=0;
    9. RCK=0;
    10. SCLR=0;
    11. G=0;
    12. #20 SI=1;SCLR=1;
    13. #20 SI=0;RCK=~RCK;
    14. #10 RCK=~RCK;#10 RCK=~RCK;#10 RCK=~RCK;#10 RCK=~RCK;
    15. #10 RCK=~RCK;#10 RCK=~RCK;#10 RCK=~RCK;#10 RCK=~RCK;
    16. #10 RCK=~RCK;#10 RCK=~RCK;#10 RCK=~RCK;#10 RCK=~RCK;
    17. #10 RCK=~RCK;#10 RCK=~RCK;#10 RCK=~RCK;#10 RCK=~RCK;
    18. #10 RCK=~RCK;G=1;
    19. #10 SI=1;
    20. #20 SI=0;RCK=1;
    21. #10 RCK=0;G=0;
    22. #40 SCLR=0;
    23. #10 RCK=1;
    24. #10 RCK=0;SCLR=1;
    25. end
    26. always #10 SCK=~SCK;
    27. shift_register shift_1
    28. (
    29. .SCK(SCK),
    30. .SI(SI),
    31. .RCK(RCK),
    32. .SCLR(SCLR),
    33. .G(G),
    34. .QA(QA),
    35. .QB(QB),
    36. .QC(QC),
    37. .QD(QD),
    38. .QE(QE),
    39. .QF(QF),
    40. .QG(QG),
    41. .QH(QH),
    42. .QH_s(QH_s)
    43. );
    44. endmodule

    二.仿真验证结果

  • 相关阅读:
    【WebGL 3D前沿】threeJs 入门篇
    Vue的路由
    神经网络量化
    qgis制图
    如何在 Linux Ubuntu 上管理用户和权限
    【经典PageRank 】02/2 算法和线性代数
    Angular组件间传值有哪几种方法?
    Go语言用Resty库编写的音频爬虫代码
    Codeforces-1688 C: Manipulating History 【构造】
    设计模式~解释器模式(Interpreter)-19
  • 原文地址:https://blog.csdn.net/bc202205/article/details/134537002