Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. // Stump Datapath
  2. // Implement your Stump datapath in structural Verilog here, no control block
  3. //
  4. // Created by Paul W Nutter, Feb 2015
  5. //
  6. // Implementation of Datapath of stump by Mircea Peia in 24 Oct 2019
  7.  
  8. // 'include' definitions of function codes etc.
  9.  
  10. `include "src/Stump/Stump_definitions.v"
  11.  
  12. // Main module
  13. /*----------------------------------------------------------------------------*/
  14.  
  15.  
  16. module Stump_datapath (input wire clk, // System clock
  17. input wire rst, // Master reset
  18. input wire [15:0] data_in, // Data from memory
  19. input wire fetch, // State from control
  20. input wire execute, // State from control
  21. input wire memory, // State from control
  22. input wire ext_op, // sign extender control
  23. input wire opB_mux_sel, // src_B mux control
  24. input wire [ 1:0] shift_op, // shift operation
  25. input wire [ 2:0] alu_func, // ALU function
  26. input wire cc_en, // Status register enable
  27. input wire reg_write, // Register bank write
  28. input wire [ 2:0] dest, // Register bank dest reg
  29. input wire [ 2:0] srcA, // Source A from reg bank
  30. input wire [ 2:0] srcB, // Source B from reg bank
  31. input wire [ 2:0] srcC, // Used by Perentie
  32. output wire [15:0] ir, // IR contents for control
  33. output wire [15:0] data_out, // Data to memory
  34. output wire [15:0] address, // Address
  35. output wire [15:0] regC, // Used by Perentie
  36. output wire [ 3:0] cc); // Flags
  37.  
  38.  
  39.  
  40. /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  41. /* Declarations of any internal signals and buses used */
  42. wire csh;
  43. wire [15:0] immed;
  44. wire [15:0] alu_out;
  45. wire [15:0] reg_data;
  46. wire [15:0] regB;
  47. wire [15:0] src_2;
  48. wire [15:0] one = 1;
  49. wire [15:0] regA;
  50. wire [15:0] operand_A;
  51. wire [15:0] operand_B;
  52. wire [15:0] addr_reg;
  53. wire [3:0] alu_flags;
  54. assign data_out = regA;
  55.  
  56.  
  57. /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  58. /* Instantiate register bank */
  59.  
  60. Stump_registers registers (.clk(clk),
  61. .rst(rst),
  62. .write_en(reg_write),
  63. .write_addr(dest),
  64. .write_data(reg_data),
  65. .read_addr_A(srcA),
  66. .read_data_A(regA),
  67. .read_addr_B(srcB),
  68. .read_data_B(regB),
  69. .read_addr_C(srcC), // Debug port address
  70. .read_data_C(regC)); // Debug port data
  71.  
  72. /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  73.  
  74. /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  75. /* Instantiate other datapath modules here */
  76. Stump_reg16bit IR ( .CLK(clk),
  77. .CE(fetch),
  78. .D(data_in),
  79. .Q(ir));
  80.  
  81. Stump_sign_extender SignExtender ( .ext_op(ext_op),
  82. .D(ir[7:0]),
  83. .Q(immed));
  84.  
  85. Stump_mux16bit MemMux1 ( .D0(alu_out),
  86. .D1(data_in),
  87. .S(memory),
  88. .Q(reg_data));
  89.  
  90. Stump_mux16bit OpBMux ( .D0(regB),
  91. .D1(immed),
  92. .S(opB_mux_sel),
  93. .Q(src_2));
  94.  
  95. Stump_mux16bit FetchMux ( .D0(src_2),
  96. .D1(one),
  97. .S(fetch),
  98. .Q(operand_B));
  99.  
  100. Stump_shifter StumpShift ( .operand_A(regA),
  101. .c_in(cc[0]),
  102. .shift_op(shift_op),
  103. .shift_out(operand_A),
  104. .c_out(csh));
  105.  
  106. Stump_ALU ALU ( .operand_A(operand_A),
  107. .operand_B(operand_B),
  108. .func(alu_func),
  109. .c_in(cc[0]),
  110. .csh(csh),
  111. .result(alu_out),
  112. .flags_out(alu_flags));
  113.  
  114.  
  115. Stump_reg4bit CC (.CLK(clk),
  116. .CE(cc_en),
  117. .D(alu_flags),
  118. .Q(cc));
  119.  
  120. Stump_reg16bit Address (.CLK(clk),
  121. .CE(execute),
  122. .D(alu_out),
  123. .Q(addr_reg));
  124.  
  125. Stump_mux16bit MemMux2 ( .D0(data_out),
  126. .D1(addr_reg),
  127. .S(memory),
  128. .Q(address));
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137. /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*/
  138.  
  139.  
  140. /*----------------------------------------------------------------------------*/
  141.  
  142. endmodule
  143.  
  144. /*============================================================================*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement