From 363c6c8c62292edb005f2fa6a89719092162aeb6 Mon Sep 17 00:00:00 2001 From: Niels Moseley Date: Fri, 12 Jan 2018 02:29:13 +0100 Subject: [PATCH] * Fixed issues for the borken ISE verilog compiler. * Added beginnings of Spartan 3E starterkit board project. --- boards/Spartan3E StarterKit/README.txt | 1 + boards/Spartan3E StarterKit/speech256_de0.v | 873 ++++++++++++++++++++ verilog/filter/filter.v | 4 +- verilog/spmul/spmul.v | 2 +- 4 files changed, 877 insertions(+), 3 deletions(-) create mode 100644 boards/Spartan3E StarterKit/README.txt create mode 100644 boards/Spartan3E StarterKit/speech256_de0.v diff --git a/boards/Spartan3E StarterKit/README.txt b/boards/Spartan3E StarterKit/README.txt new file mode 100644 index 0000000..90d215f --- /dev/null +++ b/boards/Spartan3E StarterKit/README.txt @@ -0,0 +1 @@ +This starterkit uses the XC3S500e-4fg320 FPGA. \ No newline at end of file diff --git a/boards/Spartan3E StarterKit/speech256_de0.v b/boards/Spartan3E StarterKit/speech256_de0.v new file mode 100644 index 0000000..1014ea4 --- /dev/null +++ b/boards/Spartan3E StarterKit/speech256_de0.v @@ -0,0 +1,873 @@ +// SPEECH 256 +// Copyright (C) 2017 Niels Moseley / Moseley Instruments +// http://www.moseleyinstruments.com +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// Speech256 DE0 board top level +// + +//`define USE_SDDAC +`define YOUTUBE_MESSAGE + +module Speech256_DE0 ( + CLOCK_50, + //SW, + //BUTTON, + //LEDG, + UART_TXD, + //HEX1_D, + //HEX2_D +); + + input CLOCK_50; + //input [0:5] SW; + //input [0:2] BUTTON; + //output [6:0] HEX1_D; + //output [6:0] HEX2_D; + //output [9:0] LEDG; + output UART_TXD; + + reg [5:0] data_in; + reg data_stb; + reg clk; + reg [3:0] divcnt; // clock divider counter + reg [2:0] cur_state, next_state; + + reg [9:0] rom_addr; + reg [5:0] rom_data; + reg inc_rom_addr; + + // debug signals for 16-bit DAC + wire sample_stb; + wire signed [15:0] sample_out; + + wire ldq; + wire rst_an; + + SPEECH256_TOP u_speech256_top ( + .clk (clk), + .rst_an (rst_an), + .ldq (ldq), + .data_in (rom_data), + .data_stb (data_stb), + .pwm_out (UART_TXD), + .sample_out (sample_out), + .sample_stb (sample_stb) + ); + + assign rst_an = 1'b1; + + parameter S_IDLE = 4'b000, + S_ALLOPHONE = 4'b001, + S_WAITDONE = 4'b010; + + always @(posedge CLOCK_50) + begin + + // clock divider to generate 2.5 MHz for Speech256 + if (divcnt > 9) + begin + clk <= !clk; + divcnt <= 0; + end + else + begin + divcnt <= divcnt + 1; + end + end + + always @(posedge clk) + begin + cur_state <= next_state; + if (inc_rom_addr == 1) + rom_addr <= rom_addr + 1; + end + + always @(*) + begin + // FSM defaults + data_stb <= 0; + inc_rom_addr <= 0; + next_state <= cur_state; + + case(cur_state) + S_IDLE: + begin + //if ((ldq == 1) && (BUTTON[0] == 1)) + if (ldq == 1) + begin + inc_rom_addr <= 1; + next_state <= S_ALLOPHONE; + end + else + next_state <= S_IDLE; + end + S_ALLOPHONE: + begin + data_stb <= 1; + next_state <= S_WAITDONE; + end + S_WAITDONE: + begin + if (ldq == 0) + begin + next_state <= S_IDLE; + end + end + default: + begin + next_state <= S_IDLE; + end + endcase + + // allophone ROM + // hello, world +`ifdef HELLO_WORLD + case (rom_addr) + 4'd0: + rom_data <= 6'h1B; + 4'd1: + rom_data <= 6'h07; + 4'd2: + rom_data <= 6'h2D; + 4'd3: + rom_data <= 6'h35; + 4'd4: + rom_data <= 6'h03; + 4'd5: + rom_data <= 6'h2E; + 4'd6: + rom_data <= 6'h1E; + 4'd7: + rom_data <= 6'h33; + 4'd8: + rom_data <= 6'h2D; + 4'd9: + rom_data <= 6'h15; + 4'd10: + rom_data <= 6'h03; + default: + rom_data <= 6'h03; + endcase + end +`endif + +`ifdef TEST1 + case (rom_addr) + 8'h00: rom_data <= 6'h21; + 8'h01: rom_data <= 6'h14; + 8'h02: rom_data <= 6'h00; + 8'h03: rom_data <= 6'h2B; + 8'h04: rom_data <= 6'h13; + 8'h05: rom_data <= 6'h04; + 8'h06: rom_data <= 6'h21; + 8'h07: rom_data <= 6'h14; + 8'h08: rom_data <= 6'h00; + 8'h09: rom_data <= 6'h2B; + 8'h0A: rom_data <= 6'h13; + 8'h0B: rom_data <= 6'h03; + 8'h0C: rom_data <= 6'h0D; + 8'h0D: rom_data <= 6'h3E; + 8'h0E: rom_data <= 6'h2D; + 8'h0F: rom_data <= 6'h02; + 8'h10: rom_data <= 6'h10; + 8'h11: rom_data <= 6'h13; + 8'h12: rom_data <= 6'h02; + 8'h13: rom_data <= 6'h0D; + 8'h14: rom_data <= 6'h27; + 8'h15: rom_data <= 6'h16; + 8'h16: rom_data <= 6'h04; + 8'h17: rom_data <= 6'h06; + 8'h18: rom_data <= 6'h10; + 8'h19: rom_data <= 6'h02; + 8'h1A: rom_data <= 6'h18; + 8'h1B: rom_data <= 6'h28; + 8'h1C: rom_data <= 6'h27; + 8'h1D: rom_data <= 6'h14; + 8'h1E: rom_data <= 6'h15; + 8'h1F: rom_data <= 6'h03; + 8'h20: rom_data <= 6'h06; + 8'h21: rom_data <= 6'h02; + 8'h22: rom_data <= 6'h2A; + 8'h23: rom_data <= 6'h1A; + 8'h24: rom_data <= 6'h0B; + 8'h25: rom_data <= 6'h11; + 8'h26: rom_data <= 6'h03; + 8'h27: rom_data <= 6'h21; + 8'h28: rom_data <= 6'h1F; + 8'h29: rom_data <= 6'h02; + 8'h2A: rom_data <= 6'h1D; + 8'h2B: rom_data <= 6'h1A; + 8'h2C: rom_data <= 6'h0D; + 8'h2D: rom_data <= 6'h04; + 8'h2E: rom_data <= 6'h21; + 8'h2F: rom_data <= 6'h14; + 8'h30: rom_data <= 6'h23; + 8'h31: rom_data <= 6'h04; + 8'h32: rom_data <= 6'h19; + 8'h33: rom_data <= 6'h07; + 8'h34: rom_data <= 6'h07; + 8'h35: rom_data <= 6'h37; + 8'h36: rom_data <= 6'h37; + 8'h37: rom_data <= 6'h02; + 8'h38: rom_data <= 6'h1A; + 8'h39: rom_data <= 6'h0B; + 8'h3A: rom_data <= 6'h15; + 8'h3B: rom_data <= 6'h03; + 8'h3C: rom_data <= 6'h38; + 8'h3D: rom_data <= 6'h0F; + 8'h3E: rom_data <= 6'h35; + 8'h3F: rom_data <= 6'h04; + 8'h40: rom_data <= 6'h2B; + 8'h41: rom_data <= 6'h3C; + 8'h42: rom_data <= 6'h35; + 8'h43: rom_data <= 6'h03; + 8'h44: rom_data <= 6'h2E; + 8'h45: rom_data <= 6'h0F; + 8'h46: rom_data <= 6'h0F; + 8'h47: rom_data <= 6'h0B; + 8'h48: rom_data <= 6'h03; + 8'h49: rom_data <= 6'h0D; + 8'h4A: rom_data <= 6'h1F; + 8'h4B: rom_data <= 6'h03; + 8'h4C: rom_data <= 6'h1D; + 8'h4D: rom_data <= 6'h0E; + 8'h4E: rom_data <= 6'h13; + 8'h4F: rom_data <= 6'h03; + 8'h50: rom_data <= 6'h28; + 8'h51: rom_data <= 6'h28; + 8'h52: rom_data <= 6'h3A; + 8'h53: rom_data <= 6'h03; + 8'h54: rom_data <= 6'h28; + 8'h55: rom_data <= 6'h28; + 8'h56: rom_data <= 6'h06; + 8'h57: rom_data <= 6'h23; + 8'h58: rom_data <= 6'h03; + 8'h59: rom_data <= 6'h37; + 8'h5A: rom_data <= 6'h37; + 8'h5B: rom_data <= 6'h0C; + 8'h5C: rom_data <= 6'h1E; + 8'h5D: rom_data <= 6'h02; + 8'h5E: rom_data <= 6'h29; + 8'h5F: rom_data <= 6'h37; + 8'h60: rom_data <= 6'h03; + 8'h61: rom_data <= 6'h37; + 8'h62: rom_data <= 6'h37; + 8'h63: rom_data <= 6'h07; + 8'h64: rom_data <= 6'h07; + 8'h65: rom_data <= 6'h23; + 8'h66: rom_data <= 6'h0C; + 8'h67: rom_data <= 6'h0B; + 8'h68: rom_data <= 6'h03; + 8'h69: rom_data <= 6'h14; + 8'h6A: rom_data <= 6'h02; + 8'h6B: rom_data <= 6'h0D; + 8'h6C: rom_data <= 6'h03; + 8'h6D: rom_data <= 6'h0B; + 8'h6E: rom_data <= 6'h06; + 8'h6F: rom_data <= 6'h0B; + 8'h70: rom_data <= 6'h03; + 8'h71: rom_data <= 6'h0D; + 8'h72: rom_data <= 6'h07; + 8'h73: rom_data <= 6'h07; + 8'h74: rom_data <= 6'h0B; + 8'h75: rom_data <= 6'h04; + 8'h76: rom_data <= 6'h13; + 8'h77: rom_data <= 6'h02; + 8'h78: rom_data <= 6'h0D; + 8'h79: rom_data <= 6'h13; + 8'h7A: rom_data <= 6'h03; + 8'h7B: rom_data <= 6'h28; + 8'h7C: rom_data <= 6'h28; + 8'h7D: rom_data <= 6'h35; + 8'h7E: rom_data <= 6'h0B; + 8'h7F: rom_data <= 6'h02; + 8'h80: rom_data <= 6'h39; + 8'h81: rom_data <= 6'h35; + 8'h82: rom_data <= 6'h10; + 8'h83: rom_data <= 6'h10; + 8'h84: rom_data <= 6'h04; + default: rom_data <= 6'h00; + endcase + end +`endif + +`ifdef YOUTUBE_MESSAGE + case (rom_addr) + 10'h00: rom_data <= 6'h3D; + 10'h01: rom_data <= 6'h27; + 10'h02: rom_data <= 6'h13; + 10'h03: rom_data <= 6'h0D; + 10'h04: rom_data <= 6'h0C; + 10'h05: rom_data <= 6'h2C; + 10'h06: rom_data <= 6'h37; + 10'h07: rom_data <= 6'h04; + 10'h08: rom_data <= 6'h09; + 10'h09: rom_data <= 6'h13; + 10'h0A: rom_data <= 6'h09; + 10'h0B: rom_data <= 6'h3E; + 10'h0C: rom_data <= 6'h02; + 10'h0D: rom_data <= 6'h17; + 10'h0E: rom_data <= 6'h23; + 10'h0F: rom_data <= 6'h02; + 10'h10: rom_data <= 6'h33; + 10'h11: rom_data <= 6'h1D; + 10'h12: rom_data <= 6'h1D; + 10'h13: rom_data <= 6'h02; + 10'h14: rom_data <= 6'h04; + 10'h15: rom_data <= 6'h04; + 10'h16: rom_data <= 6'h04; + 10'h17: rom_data <= 6'h04; + 10'h18: rom_data <= 6'h06; + 10'h19: rom_data <= 6'h02; + 10'h1A: rom_data <= 6'h1A; + 10'h1B: rom_data <= 6'h10; + 10'h1C: rom_data <= 6'h02; + 10'h1D: rom_data <= 6'h37; + 10'h1E: rom_data <= 6'h37; + 10'h1F: rom_data <= 6'h09; + 10'h20: rom_data <= 6'h13; + 10'h21: rom_data <= 6'h32; + 10'h22: rom_data <= 6'h0D; + 10'h23: rom_data <= 6'h1F; + 10'h24: rom_data <= 6'h01; + 10'h25: rom_data <= 6'h28; + 10'h26: rom_data <= 6'h28; + 10'h27: rom_data <= 6'h0C; + 10'h28: rom_data <= 6'h28; + 10'h29: rom_data <= 6'h28; + 10'h2A: rom_data <= 6'h01; + 10'h2B: rom_data <= 6'h0D; + 10'h2C: rom_data <= 6'h13; + 10'h2D: rom_data <= 6'h37; + 10'h2E: rom_data <= 6'h37; + 10'h2F: rom_data <= 6'h0C; + 10'h30: rom_data <= 6'h0C; + 10'h31: rom_data <= 6'h02; + 10'h32: rom_data <= 6'h29; + 10'h33: rom_data <= 6'h37; + 10'h34: rom_data <= 6'h04; + 10'h35: rom_data <= 6'h04; + 10'h36: rom_data <= 6'h0F; + 10'h37: rom_data <= 6'h0B; + 10'h38: rom_data <= 6'h02; + 10'h39: rom_data <= 6'h07; + 10'h3A: rom_data <= 6'h07; + 10'h3B: rom_data <= 6'h28; + 10'h3C: rom_data <= 6'h28; + 10'h3D: rom_data <= 6'h02; + 10'h3E: rom_data <= 6'h09; + 10'h3F: rom_data <= 6'h13; + 10'h40: rom_data <= 6'h02; + 10'h41: rom_data <= 6'h0A; + 10'h42: rom_data <= 6'h13; + 10'h43: rom_data <= 6'h02; + 10'h44: rom_data <= 6'h14; + 10'h45: rom_data <= 6'h02; + 10'h46: rom_data <= 6'h0C; + 10'h47: rom_data <= 6'h10; + 10'h48: rom_data <= 6'h01; + 10'h49: rom_data <= 6'h09; + 10'h4A: rom_data <= 6'h2D; + 10'h4B: rom_data <= 6'h07; + 10'h4C: rom_data <= 6'h10; + 10'h4D: rom_data <= 6'h07; + 10'h4E: rom_data <= 6'h0B; + 10'h4F: rom_data <= 6'h0D; + 10'h50: rom_data <= 6'h14; + 10'h51: rom_data <= 6'h32; + 10'h52: rom_data <= 6'h1E; + 10'h53: rom_data <= 6'h0B; + 10'h54: rom_data <= 6'h03; + 10'h55: rom_data <= 6'h17; + 10'h56: rom_data <= 6'h23; + 10'h57: rom_data <= 6'h02; + 10'h58: rom_data <= 6'h0F; + 10'h59: rom_data <= 6'h0B; + 10'h5A: rom_data <= 6'h02; + 10'h5B: rom_data <= 6'h14; + 10'h5C: rom_data <= 6'h02; + 10'h5D: rom_data <= 6'h0D; + 10'h5E: rom_data <= 6'h13; + 10'h5F: rom_data <= 6'h2B; + 10'h60: rom_data <= 6'h02; + 10'h61: rom_data <= 6'h37; + 10'h62: rom_data <= 6'h37; + 10'h63: rom_data <= 6'h09; + 10'h64: rom_data <= 6'h13; + 10'h65: rom_data <= 6'h32; + 10'h66: rom_data <= 6'h02; + 10'h67: rom_data <= 6'h37; + 10'h68: rom_data <= 6'h0C; + 10'h69: rom_data <= 6'h0B; + 10'h6A: rom_data <= 6'h1D; + 10'h6B: rom_data <= 6'h07; + 10'h6C: rom_data <= 6'h37; + 10'h6D: rom_data <= 6'h18; + 10'h6E: rom_data <= 6'h06; + 10'h6F: rom_data <= 6'h2B; + 10'h70: rom_data <= 6'h33; + 10'h71: rom_data <= 6'h02; + 10'h72: rom_data <= 6'h32; + 10'h73: rom_data <= 6'h0C; + 10'h74: rom_data <= 6'h0C; + 10'h75: rom_data <= 6'h09; + 10'h76: rom_data <= 6'h04; + 10'h77: rom_data <= 6'h04; + 10'h78: rom_data <= 6'h04; + 10'h79: rom_data <= 6'h04; + 10'h7A: rom_data <= 6'h04; + 10'h7B: rom_data <= 6'h06; + 10'h7C: rom_data <= 6'h02; + 10'h7D: rom_data <= 6'h2A; + 10'h7E: rom_data <= 6'h33; + 10'h7F: rom_data <= 6'h07; + 10'h80: rom_data <= 6'h0D; + 10'h81: rom_data <= 6'h2D; + 10'h82: rom_data <= 6'h13; + 10'h83: rom_data <= 6'h02; + 10'h84: rom_data <= 6'h2D; + 10'h85: rom_data <= 6'h0C; + 10'h86: rom_data <= 6'h23; + 10'h87: rom_data <= 6'h02; + 10'h88: rom_data <= 6'h18; + 10'h89: rom_data <= 6'h0B; + 10'h8A: rom_data <= 6'h02; + 10'h8B: rom_data <= 6'h0F; + 10'h8C: rom_data <= 6'h02; + 10'h8D: rom_data <= 6'h15; + 10'h8E: rom_data <= 6'h0C; + 10'h8F: rom_data <= 6'h0C; + 10'h90: rom_data <= 6'h0A; + 10'h91: rom_data <= 6'h02; + 10'h92: rom_data <= 6'h0C; + 10'h93: rom_data <= 6'h2D; + 10'h94: rom_data <= 6'h07; + 10'h95: rom_data <= 6'h07; + 10'h96: rom_data <= 6'h0B; + 10'h97: rom_data <= 6'h0D; + 10'h98: rom_data <= 6'h03; + 10'h99: rom_data <= 6'h21; + 10'h9A: rom_data <= 6'h13; + 10'h9B: rom_data <= 6'h02; + 10'h9C: rom_data <= 6'h13; + 10'h9D: rom_data <= 6'h02; + 10'h9E: rom_data <= 6'h2B; + 10'h9F: rom_data <= 6'h3C; + 10'hA0: rom_data <= 6'h35; + 10'hA1: rom_data <= 6'h02; + 10'hA2: rom_data <= 6'h1C; + 10'hA3: rom_data <= 6'h3A; + 10'hA4: rom_data <= 6'h15; + 10'hA5: rom_data <= 6'h04; + 10'hA6: rom_data <= 6'h04; + 10'hA7: rom_data <= 6'h1A; + 10'hA8: rom_data <= 6'h0B; + 10'hA9: rom_data <= 6'h15; + 10'hAA: rom_data <= 6'h02; + 10'hAB: rom_data <= 6'h06; + 10'hAC: rom_data <= 6'h03; + 10'hAD: rom_data <= 6'h31; + 10'hAE: rom_data <= 6'h16; + 10'hAF: rom_data <= 6'h2B; + 10'hB0: rom_data <= 6'h03; + 10'hB1: rom_data <= 6'h0F; + 10'hB2: rom_data <= 6'h3F; + 10'hB3: rom_data <= 6'h20; + 10'hB4: rom_data <= 6'h0D; + 10'hB5: rom_data <= 6'h02; + 10'hB6: rom_data <= 6'h37; + 10'hB7: rom_data <= 6'h37; + 10'hB8: rom_data <= 6'h07; + 10'hB9: rom_data <= 6'h07; + 10'hBA: rom_data <= 6'h23; + 10'hBB: rom_data <= 6'h0C; + 10'hBC: rom_data <= 6'h0B; + 10'hBD: rom_data <= 6'h02; + 10'hBE: rom_data <= 6'h39; + 10'hBF: rom_data <= 6'h0F; + 10'hC0: rom_data <= 6'h0F; + 10'hC1: rom_data <= 6'h0B; + 10'hC2: rom_data <= 6'h01; + 10'hC3: rom_data <= 6'h21; + 10'hC4: rom_data <= 6'h27; + 10'hC5: rom_data <= 6'h0C; + 10'hC6: rom_data <= 6'h0C; + 10'hC7: rom_data <= 6'h00; + 10'hC8: rom_data <= 6'h15; + 10'hC9: rom_data <= 6'h03; + 10'hCA: rom_data <= 6'h2D; + 10'hCB: rom_data <= 6'h17; + 10'hCC: rom_data <= 6'h0A; + 10'hCD: rom_data <= 6'h0C; + 10'hCE: rom_data <= 6'h0C; + 10'hCF: rom_data <= 6'h29; + 10'hD0: rom_data <= 6'h02; + 10'hD1: rom_data <= 6'h07; + 10'hD2: rom_data <= 6'h2D; + 10'hD3: rom_data <= 6'h07; + 10'hD4: rom_data <= 6'h10; + 10'hD5: rom_data <= 6'h07; + 10'hD6: rom_data <= 6'h0B; + 10'hD7: rom_data <= 6'h0D; + 10'hD8: rom_data <= 6'h37; + 10'hD9: rom_data <= 6'h03; + 10'hDA: rom_data <= 6'h1A; + 10'hDB: rom_data <= 6'h0B; + 10'hDC: rom_data <= 6'h15; + 10'hDD: rom_data <= 6'h02; + 10'hDE: rom_data <= 6'h28; + 10'hDF: rom_data <= 6'h28; + 10'hE0: rom_data <= 6'h3A; + 10'hE1: rom_data <= 6'h02; + 10'hE2: rom_data <= 6'h2A; + 10'hE3: rom_data <= 6'h13; + 10'hE4: rom_data <= 6'h2D; + 10'hE5: rom_data <= 6'h35; + 10'hE6: rom_data <= 6'h3F; + 10'hE7: rom_data <= 6'h06; + 10'hE8: rom_data <= 6'h0D; + 10'hE9: rom_data <= 6'h37; + 10'hEA: rom_data <= 6'h02; + 10'hEB: rom_data <= 6'h17; + 10'hEC: rom_data <= 6'h23; + 10'hED: rom_data <= 6'h02; + 10'hEE: rom_data <= 6'h0E; + 10'hEF: rom_data <= 6'h17; + 10'hF0: rom_data <= 6'h10; + 10'hF1: rom_data <= 6'h02; + 10'hF2: rom_data <= 6'h04; + 10'hF3: rom_data <= 6'h04; + 10'hF4: rom_data <= 6'h04; + 10'hF5: rom_data <= 6'h04; + 10'hF6: rom_data <= 6'h10; + 10'hF7: rom_data <= 6'h06; + 10'hF8: rom_data <= 6'h02; + 10'hF9: rom_data <= 6'h37; + 10'hFA: rom_data <= 6'h37; + 10'hFB: rom_data <= 6'h09; + 10'hFC: rom_data <= 6'h13; + 10'hFD: rom_data <= 6'h32; + 10'hFE: rom_data <= 6'h02; + 10'hFF: rom_data <= 6'h0C; + 10'h100: rom_data <= 6'h2B; + 10'h101: rom_data <= 6'h02; + 10'h102: rom_data <= 6'h1C; + 10'h103: rom_data <= 6'h14; + 10'h104: rom_data <= 6'h37; + 10'h105: rom_data <= 6'h0D; + 10'h106: rom_data <= 6'h02; + 10'h107: rom_data <= 6'h18; + 10'h108: rom_data <= 6'h0B; + 10'h109: rom_data <= 6'h02; + 10'h10A: rom_data <= 6'h12; + 10'h10B: rom_data <= 6'h07; + 10'h10C: rom_data <= 6'h02; + 10'h10D: rom_data <= 6'h08; + 10'h10E: rom_data <= 6'h17; + 10'h10F: rom_data <= 6'h2C; + 10'h110: rom_data <= 6'h08; + 10'h111: rom_data <= 6'h1A; + 10'h112: rom_data <= 6'h0D; + 10'h113: rom_data <= 6'h07; + 10'h114: rom_data <= 6'h0B; + 10'h115: rom_data <= 6'h14; + 10'h116: rom_data <= 6'h32; + 10'h117: rom_data <= 6'h1E; + 10'h118: rom_data <= 6'h38; + 10'h119: rom_data <= 6'h02; + 10'h11A: rom_data <= 6'h17; + 10'h11B: rom_data <= 6'h23; + 10'h11C: rom_data <= 6'h02; + 10'h11D: rom_data <= 6'h1A; + 10'h11E: rom_data <= 6'h2D; + 10'h11F: rom_data <= 6'h35; + 10'h120: rom_data <= 6'h28; + 10'h121: rom_data <= 6'h35; + 10'h122: rom_data <= 6'h0B; + 10'h123: rom_data <= 6'h37; + 10'h124: rom_data <= 6'h03; + 10'h125: rom_data <= 6'h04; + 10'h126: rom_data <= 6'h04; + 10'h127: rom_data <= 6'h12; + 10'h128: rom_data <= 6'h07; + 10'h129: rom_data <= 6'h02; + 10'h12A: rom_data <= 6'h1B; + 10'h12B: rom_data <= 6'h07; + 10'h12C: rom_data <= 6'h07; + 10'h12D: rom_data <= 6'h08; + 10'h12E: rom_data <= 6'h37; + 10'h12F: rom_data <= 6'h02; + 10'h130: rom_data <= 6'h15; + 10'h131: rom_data <= 6'h0C; + 10'h132: rom_data <= 6'h0C; + 10'h133: rom_data <= 6'h37; + 10'h134: rom_data <= 6'h09; + 10'h135: rom_data <= 6'h2D; + 10'h136: rom_data <= 6'h14; + 10'h137: rom_data <= 6'h02; + 10'h138: rom_data <= 6'h25; + 10'h139: rom_data <= 6'h35; + 10'h13A: rom_data <= 6'h37; + 10'h13B: rom_data <= 6'h02; + 10'h13C: rom_data <= 6'h30; + 10'h13D: rom_data <= 6'h0C; + 10'h13E: rom_data <= 6'h32; + 10'h13F: rom_data <= 6'h02; + 10'h140: rom_data <= 6'h1A; + 10'h141: rom_data <= 6'h2D; + 10'h142: rom_data <= 6'h35; + 10'h143: rom_data <= 6'h28; + 10'h144: rom_data <= 6'h35; + 10'h145: rom_data <= 6'h0B; + 10'h146: rom_data <= 6'h03; + 10'h147: rom_data <= 6'h0C; + 10'h148: rom_data <= 6'h2B; + 10'h149: rom_data <= 6'h02; + 10'h14A: rom_data <= 6'h3F; + 10'h14B: rom_data <= 6'h13; + 10'h14C: rom_data <= 6'h0C; + 10'h14D: rom_data <= 6'h2C; + 10'h14E: rom_data <= 6'h02; + 10'h14F: rom_data <= 6'h0A; + 10'h150: rom_data <= 6'h07; + 10'h151: rom_data <= 6'h0B; + 10'h152: rom_data <= 6'h07; + 10'h153: rom_data <= 6'h0E; + 10'h154: rom_data <= 6'h14; + 10'h155: rom_data <= 6'h02; + 10'h156: rom_data <= 6'h0D; + 10'h157: rom_data <= 6'h0C; + 10'h158: rom_data <= 6'h15; + 10'h159: rom_data <= 6'h02; + 10'h15A: rom_data <= 6'h04; + 10'h15B: rom_data <= 6'h04; + 10'h15C: rom_data <= 6'h04; + 10'h15D: rom_data <= 6'h04; + 10'h15E: rom_data <= 6'h10; + 10'h15F: rom_data <= 6'h06; + 10'h160: rom_data <= 6'h02; + 10'h161: rom_data <= 6'h20; + 10'h162: rom_data <= 6'h15; + 10'h163: rom_data <= 6'h13; + 10'h164: rom_data <= 6'h35; + 10'h165: rom_data <= 6'h02; + 10'h166: rom_data <= 6'h20; + 10'h167: rom_data <= 6'h0D; + 10'h168: rom_data <= 6'h09; + 10'h169: rom_data <= 6'h1E; + 10'h16A: rom_data <= 6'h0D; + 10'h16B: rom_data <= 6'h02; + 10'h16C: rom_data <= 6'h31; + 10'h16D: rom_data <= 6'h16; + 10'h16E: rom_data <= 6'h2B; + 10'h16F: rom_data <= 6'h07; + 10'h170: rom_data <= 6'h2B; + 10'h171: rom_data <= 6'h02; + 10'h172: rom_data <= 6'h35; + 10'h173: rom_data <= 6'h0B; + 10'h174: rom_data <= 6'h2D; + 10'h175: rom_data <= 6'h13; + 10'h176: rom_data <= 6'h02; + 10'h177: rom_data <= 6'h2E; + 10'h178: rom_data <= 6'h0F; + 10'h179: rom_data <= 6'h0B; + 10'h17A: rom_data <= 6'h02; + 10'h17B: rom_data <= 6'h15; + 10'h17C: rom_data <= 6'h0C; + 10'h17D: rom_data <= 6'h0A; + 10'h17E: rom_data <= 6'h0C; + 10'h17F: rom_data <= 6'h0D; + 10'h180: rom_data <= 6'h0F; + 10'h181: rom_data <= 6'h2D; + 10'h182: rom_data <= 6'h02; + 10'h183: rom_data <= 6'h09; + 10'h184: rom_data <= 6'h0C; + 10'h185: rom_data <= 6'h0C; + 10'h186: rom_data <= 6'h0B; + 10'h187: rom_data <= 6'h04; + 10'h188: rom_data <= 6'h04; + 10'h189: rom_data <= 6'h0F; + 10'h18A: rom_data <= 6'h09; + 10'h18B: rom_data <= 6'h3B; + 10'h18C: rom_data <= 6'h0D; + 10'h18D: rom_data <= 6'h02; + 10'h18E: rom_data <= 6'h28; + 10'h18F: rom_data <= 6'h27; + 10'h190: rom_data <= 6'h17; + 10'h191: rom_data <= 6'h10; + 10'h192: rom_data <= 6'h02; + 10'h193: rom_data <= 6'h0F; + 10'h194: rom_data <= 6'h0B; + 10'h195: rom_data <= 6'h02; + 10'h196: rom_data <= 6'h3B; + 10'h197: rom_data <= 6'h03; + 10'h198: rom_data <= 6'h37; + 10'h199: rom_data <= 6'h37; + 10'h19A: rom_data <= 6'h13; + 10'h19B: rom_data <= 6'h03; + 10'h19C: rom_data <= 6'h28; + 10'h19D: rom_data <= 6'h0C; + 10'h19E: rom_data <= 6'h2D; + 10'h19F: rom_data <= 6'h0D; + 10'h1A0: rom_data <= 6'h33; + 10'h1A1: rom_data <= 6'h04; + 10'h1A2: rom_data <= 6'h0B; + 10'h1A3: rom_data <= 6'h35; + 10'h1A4: rom_data <= 6'h02; + 10'h1A5: rom_data <= 6'h0F; + 10'h1A6: rom_data <= 6'h0F; + 10'h1A7: rom_data <= 6'h21; + 10'h1A8: rom_data <= 6'h0C; + 10'h1A9: rom_data <= 6'h32; + 10'h1AA: rom_data <= 6'h0C; + 10'h1AB: rom_data <= 6'h0B; + 10'h1AC: rom_data <= 6'h1E; + 10'h1AD: rom_data <= 6'h2D; + 10'h1AE: rom_data <= 6'h02; + 10'h1AF: rom_data <= 6'h13; + 10'h1B0: rom_data <= 6'h2D; + 10'h1B1: rom_data <= 6'h07; + 10'h1B2: rom_data <= 6'h2A; + 10'h1B3: rom_data <= 6'h0D; + 10'h1B4: rom_data <= 6'h27; + 10'h1B5: rom_data <= 6'h17; + 10'h1B6: rom_data <= 6'h0B; + 10'h1B7: rom_data <= 6'h0C; + 10'h1B8: rom_data <= 6'h08; + 10'h1B9: rom_data <= 6'h37; + 10'h1BA: rom_data <= 6'h02; + 10'h1BB: rom_data <= 6'h3B; + 10'h1BC: rom_data <= 6'h02; + 10'h1BD: rom_data <= 6'h0B; + 10'h1BE: rom_data <= 6'h13; + 10'h1BF: rom_data <= 6'h21; + 10'h1C0: rom_data <= 6'h0C; + 10'h1C1: rom_data <= 6'h15; + 10'h1C2: rom_data <= 6'h02; + 10'h1C3: rom_data <= 6'h04; + 10'h1C4: rom_data <= 6'h04; + 10'h1C5: rom_data <= 6'h04; + 10'h1C6: rom_data <= 6'h04; + 10'h1C7: rom_data <= 6'h0B; + 10'h1C8: rom_data <= 6'h35; + 10'h1C9: rom_data <= 6'h02; + 10'h1CA: rom_data <= 6'h37; + 10'h1CB: rom_data <= 6'h1A; + 10'h1CC: rom_data <= 6'h10; + 10'h1CD: rom_data <= 6'h09; + 10'h1CE: rom_data <= 6'h3E; + 10'h1CF: rom_data <= 6'h37; + 10'h1D0: rom_data <= 6'h02; + 10'h1D1: rom_data <= 6'h30; + 10'h1D2: rom_data <= 6'h34; + 10'h1D3: rom_data <= 6'h02; + 10'h1D4: rom_data <= 6'h39; + 10'h1D5: rom_data <= 6'h33; + 10'h1D6: rom_data <= 6'h0D; + 10'h1D7: rom_data <= 6'h02; + 10'h1D8: rom_data <= 6'h0A; + 10'h1D9: rom_data <= 6'h33; + 10'h1DA: rom_data <= 6'h27; + 10'h1DB: rom_data <= 6'h0C; + 10'h1DC: rom_data <= 6'h2C; + 10'h1DD: rom_data <= 6'h02; + 10'h1DE: rom_data <= 6'h12; + 10'h1DF: rom_data <= 6'h07; + 10'h1E0: rom_data <= 6'h02; + 10'h1E1: rom_data <= 6'h10; + 10'h1E2: rom_data <= 6'h14; + 10'h1E3: rom_data <= 6'h29; + 10'h1E4: rom_data <= 6'h0C; + 10'h1E5: rom_data <= 6'h2C; + 10'h1E6: rom_data <= 6'h02; + 10'h1E7: rom_data <= 6'h17; + 10'h1E8: rom_data <= 6'h23; + 10'h1E9: rom_data <= 6'h02; + 10'h1EA: rom_data <= 6'h12; + 10'h1EB: rom_data <= 6'h0C; + 10'h1EC: rom_data <= 6'h37; + 10'h1ED: rom_data <= 6'h02; + 10'h1EE: rom_data <= 6'h23; + 10'h1EF: rom_data <= 6'h0C; + 10'h1F0: rom_data <= 6'h21; + 10'h1F1: rom_data <= 6'h13; + 10'h1F2: rom_data <= 6'h35; + 10'h1F3: rom_data <= 6'h02; + 10'h1F4: rom_data <= 6'h04; + 10'h1F5: rom_data <= 6'h04; + 10'h1F6: rom_data <= 6'h04; + 10'h1F7: rom_data <= 6'h04; + 10'h1F8: rom_data <= 6'h04; + 10'h1F9: rom_data <= 6'h04; + 10'h1FA: rom_data <= 6'h04; + 10'h1FB: rom_data <= 6'h04; + 10'h1FC: rom_data <= 6'h1D; + 10'h1FD: rom_data <= 6'h1A; + 10'h1FE: rom_data <= 6'h0B; + 10'h1FF: rom_data <= 6'h2A; + 10'h200: rom_data <= 6'h02; + 10'h201: rom_data <= 6'h19; + 10'h202: rom_data <= 6'h1F; + 10'h203: rom_data <= 6'h02; + 10'h204: rom_data <= 6'h28; + 10'h205: rom_data <= 6'h28; + 10'h206: rom_data <= 6'h3A; + 10'h207: rom_data <= 6'h02; + 10'h208: rom_data <= 6'h19; + 10'h209: rom_data <= 6'h3A; + 10'h20A: rom_data <= 6'h02; + 10'h20B: rom_data <= 6'h0C; + 10'h20C: rom_data <= 6'h0B; + 10'h20D: rom_data <= 6'h0D; + 10'h20E: rom_data <= 6'h33; + 10'h20F: rom_data <= 6'h07; + 10'h210: rom_data <= 6'h37; + 10'h211: rom_data <= 6'h0D; + 10'h212: rom_data <= 6'h02; + 10'h213: rom_data <= 6'h1A; + 10'h214: rom_data <= 6'h0B; + 10'h215: rom_data <= 6'h15; + 10'h216: rom_data <= 6'h02; + 10'h217: rom_data <= 6'h2A; + 10'h218: rom_data <= 6'h13; + 10'h219: rom_data <= 6'h09; + 10'h21A: rom_data <= 6'h02; + 10'h21B: rom_data <= 6'h0C; + 10'h21C: rom_data <= 6'h0D; + 10'h21D: rom_data <= 6'h03; + 10'h21E: rom_data <= 6'h0E; + 10'h21F: rom_data <= 6'h07; + 10'h220: rom_data <= 6'h0D; + 10'h221: rom_data <= 6'h0E; + 10'h222: rom_data <= 6'h35; + 10'h223: rom_data <= 6'h04; + 10'h224: rom_data <= 6'h04; + 10'h225: rom_data <= 6'h04; + 10'h226: rom_data <= 6'h04; + 10'h227: rom_data <= 6'h04; + 10'h228: rom_data <= 6'h04; + 10'h229: rom_data <= 6'h04; + 10'h22A: rom_data <= 6'h04; + 10'h22B: rom_data <= 6'h04; + 10'h22C: rom_data <= 6'h04; + 10'h22D: rom_data <= 6'h04; + 10'h22E: rom_data <= 6'h04; + default: rom_data <= 6'h00; + endcase + end +`endif + +endmodule diff --git a/verilog/filter/filter.v b/verilog/filter/filter.v index 55f00fe..df847cd 100644 --- a/verilog/filter/filter.v +++ b/verilog/filter/filter.v @@ -70,7 +70,7 @@ module FILTER ( reg [3:0] next_state; // next FSM state reg clear_section, inc_section; - reg unsigned [2:0] section; // current filter section being processed (0..5) + reg [2:0] section; // current filter section being processed (0..5) wire mul_done; wire signed [15:0] mul_result, accu_in, mul_in; @@ -241,7 +241,7 @@ module FILTER ( begin for(i=0; i<6; i=i+1) begin - $display("Section %d: %d %d", i, state1[i], state2[i]); + //$display("Section %d: %d %d", i, state1[i], state2[i]); end end diff --git a/verilog/spmul/spmul.v b/verilog/spmul/spmul.v index 46f2bbf..a67076b 100644 --- a/verilog/spmul/spmul.v +++ b/verilog/spmul/spmul.v @@ -190,7 +190,7 @@ module SPMUL ( next_state <= S_IDLE; end default: - cur_state <= 0; + next_state <= S_IDLE; endcase end endmodule