Guest User

Untitled

a guest
Sep 30th, 2017
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 09/30/2017 08:22:07 PM
  7. // Design Name:
  8. // Module Name: top
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21.  
  22.  
  23. module top(
  24.     input clk_100mhz,
  25.     output reg tx_hi = 1'bz,
  26.     output reg tx_lo = 1'bz,
  27.     output reg led = 0
  28.     );
  29.    
  30.     wire    clk_125mhz;
  31.     clk_wiz_0 pll
  32.     (
  33.         // Clock out ports
  34.         .clk_125mhz(clk_125mhz),
  35.         // Clock in ports
  36.         .clk_100mhz(clk_100mhz)
  37.     );
  38.    
  39.     //4b-5b coder
  40.     reg[3:0] code = 0;
  41.     reg[4:0] code_5;
  42.     always @(*) begin
  43.         case(code)
  44.             0:  code_5 <= 5'b11110;
  45.             1:  code_5 <= 5'b01001;
  46.             2:  code_5 <= 5'b10100;
  47.             3:  code_5 <= 5'b10101;
  48.             4:  code_5 <= 5'b01010;
  49.             5:  code_5 <= 5'b01011;
  50.             6:  code_5 <= 5'b01110;
  51.             7:  code_5 <= 5'b01111;
  52.             8:  code_5 <= 5'b10010;
  53.             9:  code_5 <= 5'b10011;
  54.             10: code_5 <= 5'b10110;
  55.             11: code_5 <= 5'b10111;
  56.             12: code_5 <= 5'b11010;
  57.             13: code_5 <= 5'b11011;
  58.             14: code_5 <= 5'b11100;
  59.             15: code_5 <= 5'b11101;
  60.         endcase
  61.     end
  62.    
  63.     //Bitstream generator
  64.     reg[2:0] count = 0;
  65.     reg txbit = 0;
  66.     always @(posedge clk_125mhz) begin
  67.         count   <= count + 1'h1;
  68.         case(count)
  69.             0:  txbit <= code_5[0];
  70.             1:  txbit <= code_5[1];
  71.             2:  txbit <= code_5[2];
  72.             3:  txbit <= code_5[3];
  73.             default: begin
  74.                 txbit <= code_5[4];
  75.                 code <= code + 1'h1;
  76.                 count <= 0;
  77.             end        
  78.         endcase
  79.     end
  80.    
  81.     reg[1:0] state = 0;
  82.     always @(posedge clk_125mhz) begin
  83.         if(txbit)
  84.             state   <= state + 1'h1;
  85.        
  86.         //Actual output drive logic
  87.         led     <= 1;      
  88.         case(state)
  89.             0: begin
  90.                 tx_hi   <= 1;
  91.                 tx_lo   <= 0;
  92.             end
  93.             2: begin
  94.                 tx_hi   <= 0;
  95.                 tx_lo   <= 1;
  96.             end
  97.            
  98.             default: begin
  99.                 tx_hi   <= 'bz;
  100.                 tx_lo   <= 'bz;
  101.             end
  102.         endcase
  103.     end
  104.    
  105. endmodule
Advertisement
Add Comment
Please, Sign In to add comment