Advertisement
natsfr

Untitled

Feb 5th, 2017
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Code generated by Icestudio 0.3.0-beta2
  2. // Sun, 05 Feb 2017 02:07:00 GMT
  3.  
  4. `default_nettype none
  5.  
  6. module main #(
  7.  parameter vcd7809 = 350,
  8.  parameter v23063d = 700,
  9.  parameter v5fb649 = 800,
  10.  parameter vfbbfd8 = 600,
  11.  parameter v528657 = 100000,
  12.  parameter v7c6d55 = 0.012,
  13.  parameter vdc851f = 150
  14. ) (
  15.  input vb94c31,
  16.  output v4b594f,
  17.  output v6f57a9
  18. );
  19.  localparam p0 = vfbbfd8;
  20.  localparam p1 = v528657;
  21.  localparam p2 = v7c6d55;
  22.  localparam p3 = vdc851f;
  23.  localparam p4 = v5fb649;
  24.  localparam p5 = v23063d;
  25.  localparam p6 = vcd7809;
  26.  wire w7;
  27.  wire [0:31] w8;
  28.  wire [0:23] w9;
  29.  wire w10;
  30.  wire w11;
  31.  wire w12;
  32.  wire w13;
  33.  wire w14;
  34.  wire w15;
  35.  wire w16;
  36.  assign w12 = vb94c31;
  37.  assign w13 = vb94c31;
  38.  assign v6f57a9 = w14;
  39.  assign v4b594f = w16;
  40.  assign w13 = w12;
  41.  assign w16 = w7;
  42.  main_v862d2a vdb48fe (
  43.   .v608bd9(w15)
  44.  );
  45.  main_v372cbb #(
  46.   .T1L(p0),
  47.   .RST(p1),
  48.   .MASTER_CLK(p2),
  49.   .NB_LEDS(p3),
  50.   .T1H(p4),
  51.   .T0L(p5),
  52.   .T0H(p6)
  53.  ) v372cbb (
  54.   .busy(w7),
  55.   .addr(w8),
  56.   .value(w9),
  57.   .display(w10),
  58.   .write(w11),
  59.   .clk(w12),
  60.   .led_out(w14),
  61.   .reset(w15)
  62.  );
  63.  main_vc85087 vc85087 (
  64.   .busy(w7),
  65.   .addr(w8),
  66.   .value(w9),
  67.   .display(w10),
  68.   .write(w11),
  69.   .clk(w13)
  70.  );
  71. endmodule
  72.  
  73. module main_v862d2a (
  74.  output v608bd9
  75. );
  76.  wire w0;
  77.  assign v608bd9 = w0;
  78.  main_v862d2a_v68c173 v68c173 (
  79.   .v(w0)
  80.  );
  81. endmodule
  82.  
  83. module main_v862d2a_v68c173 (
  84.  output v
  85. );
  86.  // Bit 0
  87.  
  88.  assign v = 1'b0;
  89. endmodule
  90.  
  91. module main_v372cbb #(
  92.  parameter T0H = 0,
  93.  parameter T0L = 0,
  94.  parameter T1H = 0,
  95.  parameter T1L = 0,
  96.  parameter RST = 0,
  97.  parameter MASTER_CLK = 0,
  98.  parameter NB_LEDS = 0
  99. ) (
  100.  input clk,
  101.  input reset,
  102.  input write,
  103.  input [31:0] addr,
  104.  input [23:0] value,
  105.  input display,
  106.  output busy,
  107.  output led_out
  108. );
  109.  localparam MASTER_PERIOD        = 1 / MASTER_CLK;
  110.  localparam integer T0H_C                = T0H / MASTER_PERIOD;
  111.  localparam integer T1H_C                = T1H / MASTER_PERIOD;
  112.  localparam integer T0L_C                = T0L / MASTER_PERIOD;
  113.  localparam integer T1L_C                = T1L / MASTER_PERIOD;
  114.  localparam integer RST_C                = RST / MASTER_PERIOD;
  115.  
  116.  // Modification because no output reg
  117.  reg r_led_out = 0;
  118.  assign led_out = r_led_out;
  119.  
  120.  reg busy_r = 0;
  121.  reg reset_r = 0;
  122.  reg [7:0]r_cnt = 0;
  123.  assign busy = reset | display | reset_r | busy_r;
  124.  
  125.  reg [7:0]led_index = 0;
  126.  reg [4:0]bit_index = 0;
  127.  reg [23:0]led_val = 0;
  128.  reg [23:0]leds[0:NB_LEDS-1];
  129.  
  130.  // Write data
  131.  always @(posedge clk)
  132.  begin
  133.      r_cnt <= 0;
  134.      if(reset) begin
  135.          reset_r <= 1;
  136.      end else if(reset_r) begin
  137.          r_cnt <= r_cnt + 1;
  138.          leds[r_cnt] <= 0;
  139.          if(r_cnt == NB_LEDS - 1) reset_r <= 0;
  140.      end else if(write) leds[addr] <= value;
  141.  end
  142.  
  143.  // Display data
  144.  
  145.  reg [15:0]t_cnt = 0;
  146.  
  147.  localparam IDLE                 = 0;
  148.  localparam TSYM                 = 1;
  149.  localparam RESET                = 2;
  150.  
  151.  reg [1:0]state = IDLE;
  152.  
  153.  always @(posedge clk)
  154.  begin
  155.      
  156.      t_cnt <= t_cnt + 1;
  157.      led_val <= leds[led_index];
  158.      
  159.      case(state)
  160.          IDLE: begin
  161.              t_cnt <= 0;
  162.              led_index <= 0;
  163.              if(display) begin
  164.                  state <= TSYM;
  165.                  busy_r <= 1;
  166.              end
  167.          end
  168.          
  169.          TSYM: begin
  170.              if(led_val[bit_index]) begin
  171.                  if(t_cnt == 0)
  172.                      r_led_out <= 1;
  173.                  else if(t_cnt == T1H_C - 1)
  174.                      r_led_out <= 0;
  175.                  else if(t_cnt == T1H_C + T1L_C - 1) begin
  176.                      t_cnt <= 0;
  177.                      bit_index <= bit_index + 1;
  178.                      if(bit_index == 23) begin
  179.                          bit_index <= 0;
  180.                          led_index <= led_index + 1;
  181.                          if(led_index == NB_LEDS - 1) begin
  182.                              state <= RESET;
  183.                          end
  184.                      end
  185.                  end
  186.              end else begin
  187.                  if(t_cnt == 0)
  188.                      r_led_out <= 1;
  189.                  else if(t_cnt == T0H_C - 1)
  190.                      r_led_out <= 0;
  191.                  else if(t_cnt == T0H_C + T0L_C - 1) begin
  192.                      t_cnt <= 0;
  193.                      bit_index <= bit_index + 1;
  194.                      if(bit_index == 23) begin
  195.                          bit_index <= 0;
  196.                          led_index <= led_index + 1;
  197.                          if(led_index == NB_LEDS - 1) begin
  198.                              state <= RESET;
  199.                          end
  200.                      end
  201.                  end
  202.              end
  203.          end
  204.          
  205.          RESET: begin
  206.              if(t_cnt == RST_C) begin
  207.                  state <= IDLE;
  208.                  busy_r <= 0;
  209.              end
  210.          end
  211.      endcase
  212.  end
  213. endmodule
  214.  
  215. module main_vc85087 (
  216.  input clk,
  217.  input busy,
  218.  output write,
  219.  output reset,
  220.  output display,
  221.  output [31:0] addr,
  222.  output [23:0] value
  223. );
  224.  reg [7:0]cnt = 0;
  225.  assign addr = cnt;
  226.  
  227.  reg [23:0]color = 0;
  228.  assign value = color;
  229.  
  230.  reg r_disp = 0;
  231.  assign display = r_disp;
  232.  
  233.  reg r_w = 0;
  234.  assign write = r_w;
  235.  
  236.  always @(posedge clk)
  237.  begin
  238.      r_disp <= 0;
  239.      r_w <= 0;
  240.      if(!busy) begin
  241.          color <= color + 1;
  242.          cnt <= cnt + 1;
  243.          r_w <= 1;
  244.          if(cnt == 149) begin
  245.              r_disp <= 1;
  246.              cnt <= 0;
  247.          end
  248.      end
  249.  end
  250. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement