当前位置:   article > 正文

31条指令单周期cpu设计(Verilog)-(十)上代码→顶层模块设计&总结_31条指令单周期cpu设计(verilog)-(十)上代码→顶层模块设计总结

31条指令单周期cpu设计(verilog)-(十)上代码→顶层模块设计总结
  • 说在前面

开发环境:Vivado

语言:Verilog

cpu框架:Mips

控制器:组合逻辑

  •  设计思路

按照预先设计好的数据通路图将各个模块连接起来

  1. `timescale 1ns / 1ps
  2. module cpu(
  3. input clk,
  4. input reset,
  5. input [31:0] inst,
  6. input [31:0] rdata,
  7. output [31:0] pc,
  8. output [31:0] addr,
  9. output [31:0] wdata,
  10. output IM_R,
  11. output DM_CS,
  12. output DM_R,
  13. output DM_W
  14. );
  15. //--------------------------------//控制信号(除有关存储器)
  16. wire PC_CLK; //
  17. wire PC_ENA; //
  18. wire M1; //
  19. wire M2; //
  20. wire M3; //
  21. wire M4; //
  22. wire M5; //
  23. wire M6; //
  24. wire M7; //
  25. wire M8; //
  26. wire M9; //
  27. wire M10; //
  28. wire M11; //
  29. wire [3:0] ALUC; //
  30. wire RF_W; //
  31. wire RF_CLK; //
  32. wire C_EXT16; //
  33. //--------------------------------//运算标志位
  34. wire zero; //
  35. wire carry; //
  36. wire negative; //
  37. wire overflow; //
  38. wire add_overflow; //
  39. //--------------------------------//
  40. wire [31:0] INS; //译码后指令
  41. //--------------------------------//数据通路(除有关存储器)
  42. wire [31:0] D_ALU; //
  43. wire [31:0] D_PC; //
  44. wire [31:0] D_RF; //
  45. wire [31:0] D_Rs; //
  46. wire [31:0] D_Rt; //
  47. wire [31:0] D_IM; //
  48. wire [31:0] D_DM; //
  49. wire [31:0] D_Mux1; //
  50. wire [31:0] D_Mux2; //
  51. wire [31:0] D_Mux3; //
  52. wire [4:0] D_Mux4; //
  53. wire [4:0] D_Mux5; //
  54. wire [31:0] D_Mux6; //
  55. wire [31:0] D_Mux7; //
  56. wire [31:0] D_Mux8; //
  57. wire [31:0] D_Mux9; //
  58. wire [31:0] D_Mux10; //
  59. wire D_Mux11; //
  60. //
  61. wire [31:0] D_EXT1; //
  62. wire [31:0] D_EXT5; //
  63. wire [31:0] D_EXT16; //
  64. wire [31:0] D_EXT18; //
  65. wire [31:0] D_ADD; //
  66. wire [31:0] D_ADD8; //
  67. wire [31:0] D_NPC; //
  68. wire [31:0] D_ii; //
  69. assign PC_ENA = 1;
  70. //--------------------------------//外部通路连接
  71. assign pc = D_PC;
  72. assign addr = D_ALU;
  73. assign wdata = D_Rt;
  74. //--------------------------------//指令译码
  75. instr_dec cpu_ins (inst, INS);
  76. operation cpu_opcode (clk,zero,INS,PC_CLK,IM_R,M1,M2,M3,M4,M5,M6,M7,M9,M10,ALUC,RF_W,RF_CLK,DM_W,DM_R,DM_CS,C_EXT16);
  77. //--------------------------------//部件
  78. pcreg pc_out (PC_CLK, reset, PC_ENA, D_Mux1, D_PC);
  79. alu cpu_alu (D_Mux9, D_Mux10, ALUC[3:0], D_ALU, zero, carry, negative, overflow);
  80. regfile cpu_ref (RF_CLK, reset, RF_W, overflow, inst[25:21], inst[20:16], D_Mux5, D_Mux6,D_Rs, D_Rt);
  81. mux cpu_mux1 (D_Mux3, D_Mux2, M1, D_Mux1);
  82. mux cpu_mux2 (D_NPC, D_ADD, M2, D_Mux2);
  83. mux cpu_mux3 (D_ii, D_Rs, M3, D_Mux3);
  84. mux5 cpu_mux4 (inst[10:6], D_Rs[4:0], {INS[30],M4},D_Mux4);
  85. mux5 cpu_mux5 (inst[15:11],inst[20:16],{INS[30],M5},D_Mux5);
  86. mux cpu_mux6 (D_Mux7, D_ADD8, M6, D_Mux6);
  87. mux cpu_mux7 (D_ALU, rdata, M7, D_Mux7);
  88. mux cpu_mux9 (D_EXT5, D_Rs, M9, D_Mux9);
  89. mux cpu_mux10 (D_Rt, D_EXT16, M10, D_Mux10);
  90. extend5 cpu_ext5 (D_Mux4, D_EXT5);
  91. extend16 cpu_ext16 (inst[15:0], C_EXT16, D_EXT16);
  92. extend18 cpu_ext18 (inst[15:0], D_EXT18);
  93. add cpu_add (D_EXT18, D_NPC, D_ADD, add_overflow);
  94. add8 cpu_add8 (D_PC, D_ADD8);
  95. npc cpu_npc (D_PC, reset, D_NPC);
  96. II cpu_ii (D_PC[31:28],inst[25:0], D_ii);
  97. endmodule

  • 总结

总算把鸽的写完了,我觉得这个系列的重点在前面的设计部分,后面的代码可以自己写,只要掌握了整个流程写起来还是挺简单的,就是工作量很大,如果想要自己写的话就看前面几篇即可,代码部分可以不看了。

 


31条指令单周期cpu设计(Verilog)-(一)相关软件

31条指令单周期cpu设计(Verilog)-(二)总体设计

31条指令单周期cpu设计(Verilog)-(三)指令分析

31条指令单周期cpu设计(Verilog)-(四)数据输入输出关系表

31条指令单周期cpu设计(Verilog)-(五)整体数据通路图设计

31条指令单周期cpu设计(Verilog)-(六)指令操作时间表设计

31条指令单周期cpu设计(Verilog)-(七)整体代码结构

31条指令单周期cpu设计(Verilog)-(八)上代码→指令译码以及控制器

31条指令单周期cpu设计(Verilog)-(九)上代码→基本模块

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

闽ICP备14008679号