Advertisement
Guest User

morsecode

a guest
Jun 18th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 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. input CLOCK_50;
  10. reg [13:0] load_val;
  11.  
  12. wire load_n, halfclk;
  13.  
  14. ratedivider d0(.reset_n(reset),.speed(2'b10),.clk_in(CLOCK_50),.clk_out(halfclk));
  15.  
  16. shifter s0(.load_val(load_val),.load_n(SW[1]),.reset(KEY[0]),.out(LEDR[0]),.clk(halfclk));
  17.  
  18. always @(*)
  19. begin
  20. case (SW[2:0])
  21.  
  22. 3'b000: load_val <= 14'b10101000000000;
  23. 3'b001: load_val <= 14'b11100000000000;
  24. 3'b010: load_val <= 14'b10101110000000;
  25. 3'b011: load_val <= 14'b10101011100000;
  26. 3'b100: load_val <= 14'b10111011100000;
  27. 3'b101: load_val <= 14'b11101010111000;
  28. 3'b110: load_val <= 14'b11101011101110;
  29. 3'b111: load_val <= 14'b11101110101000;
  30. `
  31. /*
  32.  
  33. 3'b000: load_val <= 101010;
  34. 3'b001: load_val <= 1110;
  35. 3'b010: load_val <= 10101110;
  36. 3'b011: load_val <= 1010101110;
  37. 3'b100: load_val <= 1011101110;
  38. 3'b101: load_val <= 111010101110;
  39. 3'b110: load_val <= 11101011101110;
  40. 3'b111: load_val <= 111011101010;
  41. */
  42. endcase
  43. end
  44.  
  45. // assign LEDR[0] = out[0];
  46. endmodule
  47.  
  48. module shifter(load_val,load_n,reset,out,clk);
  49. input [13:0] load_val;
  50. input clk, load_n,reset;
  51. output out;
  52. reg [13:0] temp;
  53. always @(posedge clk or negedge load_n)
  54. begin
  55. if (load_n==0)
  56. temp <= load_val;
  57. else if(reset == 1)
  58. temp <= 0;
  59. else
  60. begin
  61. // temp[13] <= 0;
  62. //temp[12:0] <= temp[13:1];
  63. temp = temp >>1
  64. end
  65. end
  66. endmodule
  67.  
  68.  
  69. module ratedivider(reset_n, speed,clk_in,clk_out);
  70. input [1:0] speed;
  71. input clk_in;
  72. output clk_out;
  73.  
  74. // wire clock,par_load;
  75. input reset_n;
  76. reg [25:0] q;
  77.  
  78. reg clk_out,enable;
  79. reg [25:0] d;
  80.  
  81. reg temp;
  82.  
  83. always @(posedge clk_in)
  84. begin
  85. if(reset_n == 1'b0)
  86. q<=0;
  87. else if (enable == 1'b1)
  88. begin
  89. if(q>=d)
  90. begin
  91. q <= 26'b0;
  92. temp = 1;
  93. end
  94. else
  95. begin
  96. q <= q + 1'b1;
  97. temp = 0;
  98. end
  99. end
  100. end
  101.  
  102. always @(*)
  103. begin
  104. case (speed)
  105. 2'b00:
  106. begin
  107. enable = 0;
  108. // clk_out <= clk_in;
  109. // temp1 <= clk_in;
  110. end
  111. 2'b01:
  112. begin
  113. enable = 1;
  114. d <= 26'b10111110101111000001111111;
  115. // d <= 26'b00000000000000000000000100;
  116. end
  117. 2'b10:
  118. begin
  119. enable = 1;
  120. d <= 26'b01011111010111100000111111;
  121. end
  122. 2'b11:
  123. begin
  124. enable = 1;
  125. d <= 26'b00101111101011110000011111;
  126. end
  127. endcase
  128. end
  129.  
  130. always @(*)
  131. begin
  132. if (enable==1)
  133. clk_out = temp;
  134. else
  135. clk_out = clk_in;
  136. end
  137. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement