Advertisement
Guest User

edited_morse

a guest
Jun 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. module morsecode(SW,LEDR,KEY,CLOCK_50);
  2. //SW[2:0] is char input;
  3. //KEY[1] display;
  4. //key[0] reset
  5.  
  6. input [9:0] SW;
  7. input [3:0] KEY;
  8. output [9:0] LEDR;
  9.  
  10.  
  11.  
  12. input CLOCK_50;
  13. reg [13:0] load_val;
  14.  
  15. wire load_n, halfclk;
  16.  
  17. //
  18. // assign LEDR[9] = 1;
  19.  
  20. ratedivider d0(.clk_in(CLOCK_50),.clk_out(halfclk));
  21.  
  22. shifter s0(.load_val(load_val),.load_n(KEY[1]),.reset(KEY[0]),.out(LEDR[0]),.clk(halfclk));
  23.  
  24. always @(*)
  25. begin
  26. case (SW[2:0])
  27.  
  28. 3'b000: load_val <= 14'b11010100000000;
  29. 3'b001: load_val <= 14'b11110000000000;
  30. 3'b010: load_val <= 14'b11010111000000;
  31. 3'b011: load_val <= 14'b11010101110000;
  32. 3'b100: load_val <= 14'b11011101110000;
  33. 3'b101: load_val <= 14'b11110101011100;
  34. 3'b110: load_val <= 14'b11110101110111;
  35. 3'b111: load_val <= 14'b11110111010100;
  36.  
  37. endcase
  38. end
  39.  
  40. endmodule
  41.  
  42. module shifter(load_val,load_n,reset,out,clk);
  43. input [13:0] load_val;
  44. input clk, load_n,reset;
  45. output out;
  46. reg out;
  47. reg [13:0] temp;
  48. always @(posedge clk or negedge load_n or negedge reset)
  49.  
  50. begin
  51. if(reset == 0)
  52. temp <= 0;
  53. else if (load_n==0)
  54. temp <= load_val;
  55. else
  56. begin
  57. temp = temp <<1;
  58. out <= temp[13];
  59. end
  60. end
  61. endmodule
  62.  
  63.  
  64. module ratedivider0(clk_in,clk_out);
  65. input clk_in;
  66. output clk_out;
  67. reg clk_out;
  68.  
  69. reg [24:0] count;
  70. always @(posedge clk_in)
  71. begin
  72. count <= count + 1;
  73. if(count == 25'b0101111101011110000011111)
  74. begin
  75. count<=0;
  76. clk_out <= !clk_out;
  77. end
  78. end
  79. endmodule
  80.  
  81. module ratedivider(reset_n, speed,clk_in,clk_out);
  82. input [1:0] speed;
  83. input clk_in;
  84. output clk_out;
  85.  
  86. input reset_n;
  87. reg [25:0] q;
  88.  
  89. reg clk_out,enable;
  90. reg [25:0] d;
  91.  
  92. reg temp;
  93.  
  94. always @(posedge clk_in)
  95. begin
  96. if(reset_n == 1'b0)
  97. q<=0;
  98. else if (enable == 1'b1)
  99. begin
  100. if(q == d)
  101. begin
  102. q <= 26'b0;
  103. temp = 1;
  104. end
  105. else
  106. begin
  107. q <= q + 1'b1;
  108. temp = 0;
  109. end
  110. end
  111. end
  112.  
  113. always @(*)
  114. begin
  115. case (speed)
  116. 2'b00:
  117. begin
  118. enable = 0;
  119. end
  120. 2'b01:
  121. begin
  122. enable = 1;
  123. d <= 26'b10111110101111000001111111;
  124. end
  125. 2'b10:
  126. begin
  127. enable = 1;
  128. d <= 26'b01011111010111100000111111;
  129. end
  130. 2'b11:
  131. begin
  132. enable = 1;
  133. d <= 26'b00101111101011110000011111;
  134. end
  135. endcase
  136. end
  137.  
  138. always @(*)
  139. begin
  140. if (enable==1)
  141. clk_out = temp;
  142. else
  143. clk_out = clk_in;
  144. end
  145. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement