Skip to content

Commit 46809cc

Browse files
committed
wip
1 parent 34f63e0 commit 46809cc

File tree

5 files changed

+94
-17
lines changed

5 files changed

+94
-17
lines changed

hdl/jt12_pg_inc.v

+10-10
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,19 @@ module jt12_pg_inc (
3131
output reg [16:0] phinc_pure
3232
);
3333

34-
reg [10:0] fnum_mod;
34+
reg [11:0] fnum_mod;
3535

3636
always @(*) begin
37-
fnum_mod = fnum + {{3{pm_offset[7]}},pm_offset};
37+
fnum_mod = {fnum,1'b0} + {{4{pm_offset[7]}},pm_offset};
3838
case ( block )
39-
3'd0: phinc_pure = { 7'd0, fnum_mod[10:1] };
40-
3'd1: phinc_pure = { 6'd0, fnum_mod };
41-
3'd2: phinc_pure = { 5'd0, fnum_mod, 1'd0 };
42-
3'd3: phinc_pure = { 4'd0, fnum_mod, 2'd0 };
43-
3'd4: phinc_pure = { 3'd0, fnum_mod, 3'd0 };
44-
3'd5: phinc_pure = { 2'd0, fnum_mod, 4'd0 };
45-
3'd6: phinc_pure = { 1'd0, fnum_mod, 5'd0 };
46-
3'd7: phinc_pure = { fnum_mod, 6'd0 };
39+
3'd0: phinc_pure = { 7'd0, fnum_mod[11:2] };
40+
3'd1: phinc_pure = { 6'd0, fnum_mod[11:1] };
41+
3'd2: phinc_pure = { 5'd0, fnum_mod[11:0] };
42+
3'd3: phinc_pure = { 4'd0, fnum_mod, 1'd0 };
43+
3'd4: phinc_pure = { 3'd0, fnum_mod, 2'd0 };
44+
3'd5: phinc_pure = { 2'd0, fnum_mod, 3'd0 };
45+
3'd6: phinc_pure = { 1'd0, fnum_mod, 4'd0 };
46+
3'd7: phinc_pure = { fnum_mod, 5'd0 };
4747
endcase
4848
end
4949

hdl/jt12_pg_sum.v

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ module jt12_pg_sum (
3535
output reg [ 9:0] phase_op
3636
);
3737

38-
reg [16:0] phinc_premul;
38+
reg [16:0] phinc_premul;
3939
reg [19:0] phinc_mul;
4040

4141
always @(*) begin
4242
phinc_premul = phinc_pure + {{11{detune_signed[5]}},detune_signed};
43-
phinc_mul = ( mul==4'd0 ) ? {4'b0,phinc_premul[16:1]} : (phinc_premul * mul);
43+
phinc_mul = ( mul==4'd0 ) ? {4'b0,phinc_premul[16:1]} : ({3'd0,phinc_premul} * mul);
4444

45-
phase_out = pg_rst ? 20'd0 : (phase_in + phinc_mul);
45+
phase_out = pg_rst ? 20'd0 : (phase_in + { phinc_mul});
4646
phase_op = phase_out[19:10];
4747
end
4848

ver/jt12_pg_comb_tb/test.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,10 @@ int main(int argc, char *argv[]) {
158158
continue;
159159
}
160160
if( strcmp(argv[k],"-pms")==0 ) {
161-
if( ++k==argc ) { cerr << "ERROR: expecting pms (0-15) after -pms argument\n"; return 3; }
161+
if( ++k==argc ) { cerr << "ERROR: expecting pms (0-7) after -pms argument\n"; return 3; }
162162
if( sscanf( argv[k], "%d", &pms)!=1 ) { cerr << "ERROR: expecting pms (0-7) after -pms argument\n"; return 3; }
163163
if( pms<0 || pms>7 ) { cerr << "ERROR: expecting pms (0-7) after -pms argument\n"; return 3; }
164+
do_pm = true;
164165
continue;
165166
}
166167
cout << "ERROR: unknown argument " << argv[k] << '\n';
@@ -179,7 +180,7 @@ int main(int argc, char *argv[]) {
179180
top.phase_in = 0;
180181
float base_freq = get_freq(top);
181182

182-
printf("(%2d) %d,%2d,%4d,", top.mul, top.block, top.keycode&3, top.fnum );
183+
printf("(%2d) %d,%2d, %4d,", top.mul, top.block, top.keycode&3, top.fnum );
183184
printf("%4.1fHz -> ", base_freq );
184185
if( do_detune ) {
185186
for( top.detune=1; top.detune<8; top.detune++ ) {

ver/jt12_pg_comb_tb/test.v

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
2+
module test(
3+
input [ 2:0] block,
4+
input [10:0] fnum,
5+
// Phase Modulation
6+
input [ 4:0] lfo_mod,
7+
input [ 2:0] pms,
8+
// Detune
9+
input [ 2:0] detune,
10+
11+
output [ 4:0] keycode,
12+
// Phase add
13+
input [ 3:0] mul,
14+
input [19:0] phase_in,
15+
input pg_rst,
16+
17+
output [19:0] phase_out,
18+
output [ 9:0] phase_op
19+
);
20+
21+
wire signed [ 5:0] dt;
22+
wire [16:0] phinc;
23+
24+
jt12_pg_comb u_uut(
25+
.block ( block ),
26+
.fnum ( fnum ),
27+
// Phase Modulation
28+
.lfo_mod ( lfo_mod ),
29+
.pms ( pms ),
30+
// Detune
31+
.detune ( detune ),
32+
33+
.keycode ( keycode ),
34+
.detune_out ( dt ),
35+
// Phase increment
36+
.phinc_out ( phinc ),
37+
// Phase add
38+
.mul ( mul ),
39+
.phase_in ( phase_in ),
40+
.pg_rst ( pg_rst ),
41+
.detune_in ( dt ),
42+
.phinc_in ( phinc ),
43+
44+
.phase_out ( phase_out ),
45+
.phase_op ( phase_op )
46+
);
47+
48+
endmodule;

ver/verilator/jt12_test.cpp

+30-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ class SimTime {
4747
else {
4848
main_time = main_next;
4949
if( --verbose_ticks == 0 ) {
50-
cerr << "Current time " << dec << (int)(main_time/1000000) << " ms\n";
50+
// cerr << "Current time " << dec << (int)(main_time/1000000) << " ms\n";
51+
cerr << '.';
5152
verbose_ticks = 48000*24/2;
5253
}
5354
toggle=false;
@@ -218,6 +219,30 @@ int main(int argc, char** argv, char** env) {
218219
}
219220
continue;
220221
}
222+
if( string(argv[k])=="-only") {
223+
int ch;
224+
if( sscanf(argv[++k],"%d",&ch) != 1 ) {
225+
cout << "ERROR: needs channel number after -only\n";
226+
return 1;
227+
}
228+
if( ch<0 || ch>5 ) {
229+
cout << "ERROR: channel must be within 0-5 range\n";
230+
return 1;
231+
}
232+
cout << "Only channel " << ch << " will be played\n";
233+
for( int k=0; k<6; k++ ) {
234+
if( k==ch ) continue;
235+
switch(k) {
236+
case 0: writter.block( 0xFF, 0x28, [](int v)->int{ return (v&0xf)==0? 0 : v;} ); break;
237+
case 1: writter.block( 0xFF, 0x28, [](int v)->int{ return (v&0xf)==1? 0 : v;} ); break;
238+
case 2: writter.block( 0xFF, 0x28, [](int v)->int{ return (v&0xf)==2? 0 : v;} ); break;
239+
case 3: writter.block( 0xFF, 0x28, [](int v)->int{ return (v&0xf)==4? 0 : v;} ); break;
240+
case 4: writter.block( 0xFF, 0x28, [](int v)->int{ return (v&0xf)==5? 0 : v;} ); break;
241+
case 5: writter.block( 0xFF, 0x28, [](int v)->int{ return (v&0xf)==6? 0 : v;} ); break;
242+
}
243+
}
244+
continue;
245+
}
221246
cout << "ERROR: Unknown argument " << argv[k] << "\n";
222247
return 1;
223248
}
@@ -374,7 +399,10 @@ int main(int argc, char** argv, char** env) {
374399

375400

376401
void WaveWritter::write( int16_t* lr ) {
377-
fsnd.write( (char*)lr, sizeof(int16_t)*2 );
402+
int16_t g[2];
403+
g[0] = lr[0]<<2;
404+
g[1] = lr[1]<<2;
405+
fsnd.write( (char*)&g, sizeof(int16_t)*2 );
378406
}
379407

380408
WaveWritter::WaveWritter(const char *filename) {

0 commit comments

Comments
 (0)