OpenCores
URL https://opencores.org/ocsvn/sqmusic/sqmusic/trunk

Subversion Repositories sqmusic

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /sqmusic/trunk/sqm
    from Rev 18 to Rev 19
    Reverse comparison

Rev 18 → Rev 19

/sq_pg.v
13,11 → 13,12
`timescale 1ns/1ps
 
module sq_slot(
input clk,
input reset_n,
input [10:0] fnumber,
input [2:0] block,
input [3:0] multiple
input clk,
input reset_n,
input [10:0] fnumber,
input [2:0] block,
input [3:0] multiple,
output [12:0] linear
);
wire [9:0]phase;
41,7 → 42,7
.clk (clk),
.reset_n (reset_n),
.x (sin_log),
.y (sin_linear) );
.y (linear) );
 
endmodule
 
97,10 → 98,18
module sq_pow(
input clk,
input reset_n,
input [12:0]x,
output [12:0]y // LSB is the sign. 0=positive, 1=negative
input rd_n, // read enable, active low
input [12:0]x, // LSB is the sign. 0=positive, 1=negative
output reg [12:0]y
);
 
parameter st_input = 3'b000;
parameter st_lut_read = 3'b001;
parameter st_shift = 3'b010;
parameter st_sign = 3'b011;
parameter st_output = 3'b100;
 
reg [2:0] state;
reg [12:0] pow_table[255:0];
 
initial begin
107,11 → 116,10
$readmemh("../tables/pow_table.hex", pow_table);
end
reg [7:0]index;
reg [2:0]exp;
reg [3:0]exp;
reg sign;
 
wire [12:0] raw = pow_table[index] >> exp;
assign y = sign ? ~raw+13'b1 : raw; // regular 2's complement
reg [12:0] raw, shifted, final;
 
always @(posedge clk or negedge reset_n ) begin
if( !reset_n ) begin
118,12 → 126,54
index <= 8'b0;
exp <= 3'b0;
sign <= 1'b0;
raw <= 13'b0;
shifted <= 13'b0;
y <= 12'b0;
state <= st_input;
end
else begin
exp <= x[12:10];
index <= x[9:1];
sign <= x[0];
case ( state )
st_input: begin
if( !rd_n ) begin
exp <= x[12:9];
index <= x[8:1];
sign <= x[0];
state <= st_lut_read;
end
else state <= st_lut_read;
end
st_lut_read: begin
raw <= pow_table[index];
state <= st_shift;
end
st_shift: begin
shifted <= raw >> exp;
state <= st_sign;
end
st_sign: begin
final <= sign ? ~shifted + 1'b1 : shifted;
state <= st_output;
end
st_output: begin
y <= final;
state <= st_input;
end
endcase
end
end
 
always @(posedge clk or negedge reset_n ) begin
if( !reset_n )
raw <= 13'b0;
else
raw <= pow_table[index];
end
 
always @(posedge clk or negedge reset_n ) begin
if( !reset_n )
shifted <= 13'b0;
else
shifted <= raw >> exp;
end
 
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.