Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. /******************************************************************************
  2. * *
  3. * Module: Peripheral_on_External_Bus *
  4. * Description: *
  5. * This module is used for the registers for part I of the bus *
  6. * communication exercise in Altera's computer organization lab set. *
  7. * *
  8. * This is a skeleton module that must be completed as part of this exercise. *
  9. * *
  10. *****************************************************************************/
  11.  
  12. module Peripheral_on_External_Bus (
  13. // Inputs
  14. clk_clk,
  15. reset_reset_n,
  16.  
  17. address,
  18. bus_enable,
  19. byte_enable,
  20. rw,
  21. write_data,
  22.  
  23. // Outputs
  24. acknowledge,
  25. read_data,
  26.  
  27. register_0,
  28. register_1,
  29. register_2,
  30. register_3
  31. );
  32.  
  33. /*****************************************************************************
  34. * Port Declarations *
  35. *****************************************************************************/
  36.  
  37. // Inputs
  38. input clk_clk;
  39. input reset_reset_n;
  40.  
  41. input [19:0] address;
  42. input bus_enable;
  43. input [1:0] byte_enable;
  44. input rw;
  45. input [15:0] write_data;
  46.  
  47. // Outputs
  48. output acknowledge;
  49. output [15:0] read_data;
  50.  
  51. output reg [15:0] register_0;
  52. output reg [15:0] register_1;
  53. output reg [15:0] register_2;
  54. output reg [15:0] register_3;
  55.  
  56. /*****************************************************************************
  57. * Sequential Logic *
  58. *****************************************************************************/
  59.  
  60. always @(posedge clk_clk)
  61. begin
  62. if (reset_reset_n == 0)
  63. begin
  64. register_0 <= 16'h0000;
  65. register_1 <= 16'h0000;
  66. register_2 <= 16'h0000;
  67. register_3 <= 16'h0000;
  68. end
  69.  
  70. else if (~rw & acknowledge & address[19])
  71. begin
  72. case (address[2:1])
  73. 2'b00: register_0 <= write_data;
  74. 2'b01: register_1 <= write_data;
  75. 2'b10: register_2 <= write_data;
  76. 2'b11: register_3 <= write_data;
  77. endcase
  78. end
  79.  
  80. end
  81.  
  82. /*****************************************************************************
  83. * Combinational Logic *
  84. *****************************************************************************/
  85.  
  86. assign acknowledge = address[19] ? bus_enable : 1'bz;
  87.  
  88. assign read_data = (address[19] & rw) ?
  89. (({16{~address[2] & ~address[1]}} & register_0) +
  90. ({16{~address[2] & address[1]}} & register_1) +
  91. ({16{ address[2] & ~address[1]}} & register_2) +
  92. ({16{ address[2] & address[1]}} & register_3)) :
  93. {16{1'bz}}; // if MSB=0 or rw=0, leave read_data for SRAM
  94.  
  95.  
  96.  
  97.  
  98. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement