logo

 

Introduction
Master clock
Générateur de fréquence
Régler le volume
PWM
Générateur de bruit
Dent de scie et triangle
Sinus
Interface CPU
Silicium: Volume
Silicum: DAC

Silicium: Selection du volume

Photos par John McMaster.

6 bascules D. 4 pour le volume fixe, et 2 pour choisir l'EG (fixe, EG/4, EG/2, EG).
Le AY-3-8910 n'a qu'un bit pour choisir volume fixe ou EG.

Silicium annoté du DAC

Test...

always @(posedge CLK)		// Bascules D
begin
	MODE[1] <= DATA_BUS[5];
	MODE[0] <= DATA_BUS[4];
	V_IN[3] <= DATA_BUS[3];
	V_IN[2] <= DATA_BUS[2];
	V_IN[1] <= DATA_BUS[1];
	V_IN[0] <= DATA_BUS[0];
end

// Complements et decodeur
assign MODE_SEL_0 = ~(MODE[1] | MODE[0]);
assign MODE_SEL_1 = ~(MODE[1] | ~MODE[0]);
assign MODE_SEL_2 = ~(~MODE[1] | MODE[0]);
assign MODE_SEL_3 = ~(~MODE[1] | ~MODE[0]);

// Selection
V_OUT[0] = (V_IN[0] & MODE_SEL_0) | (ENV[2] & MODE_SEL_1) | (ENV[1] & MODE_SEL_2) | (ENV[0] & MODE_SEL_3);
V_OUT[1] = (V_IN[1] & MODE_SEL_0) | (ENV[3] & MODE_SEL_1) | (ENV[2] & MODE_SEL_2) | (ENV[1] & MODE_SEL_3);
V_OUT[2] = (V_IN[2] & MODE_SEL_0) | (ENV[3] & MODE_SEL_2) | (ENV[2] & MODE_SEL_3);
V_OUT[3] = (V_IN[3] & MODE_SEL_0) | (ENV[3] & MODE_SEL_3);
Ou plus simplement...
// Bascules D
always @(posedge CLK)
	{MODE, V_IN} <= DATA_BUS[5:0];

// Magie !
V_OUT = (MODE == 0) ? V_IN :
			(MODE == 1) ? {2'b0, ENV[3:2]} :
			(MODE == 2) ? {1'b0, ENV[3:1]} :
			ENV;

Quelqu'un avec beaucoup plus d'experience que moi dans ce domaine m'a dit que les passages de "oh putain c'est l'enfer" à "c'est bidon en fait" sont très fréquents...

...

footer
symbol symbol symbol symbol symbol