Lab 3: Audio Processing System #3
@@ -30,8 +30,7 @@ ARCHITECTURE Behavioral OF balance_controller IS
|
|||||||
|
|
||||||
CONSTANT BALANCE_STEPS : INTEGER := (2 ** (BALANCE_WIDTH - 1)) / (2 ** BALANCE_STEP_2) + 1;
|
CONSTANT BALANCE_STEPS : INTEGER := (2 ** (BALANCE_WIDTH - 1)) / (2 ** BALANCE_STEP_2) + 1;
|
||||||
CONSTANT BAL_MID : INTEGER := 2 ** (BALANCE_WIDTH - 1); -- 512 for 10 bit
|
CONSTANT BAL_MID : INTEGER := 2 ** (BALANCE_WIDTH - 1); -- 512 for 10 bit
|
||||||
CONSTANT BLOCK_SIZE : INTEGER := 2 ** BALANCE_STEP_2;
|
CONSTANT DEAD_ZONE : INTEGER := (2 ** BALANCE_STEP_2) / 2;
|
||||||
CONSTANT DEAD_ZONE : INTEGER := BLOCK_SIZE / 2;
|
|
||||||
|
|
||||||
SIGNAL left_channel : INTEGER RANGE 0 TO BALANCE_STEPS := 0;
|
SIGNAL left_channel : INTEGER RANGE 0 TO BALANCE_STEPS := 0;
|
||||||
SIGNAL right_channel : INTEGER RANGE 0 TO BALANCE_STEPS := 0;
|
SIGNAL right_channel : INTEGER RANGE 0 TO BALANCE_STEPS := 0;
|
||||||
@@ -41,10 +40,12 @@ ARCHITECTURE Behavioral OF balance_controller IS
|
|||||||
BEGIN
|
BEGIN
|
||||||
-- Assigning the output signals
|
-- Assigning the output signals
|
||||||
m_axis_tvalid <= m_axis_tvalid_int;
|
m_axis_tvalid <= m_axis_tvalid_int;
|
||||||
s_axis_tready <= m_axis_tready AND aresetn;
|
s_axis_tready <= (m_axis_tready OR NOT m_axis_tvalid_int) AND aresetn; -- Chiedere e in caso togliere 'AND aresetn'
|
||||||
|
|
||||||
-- Balance to exp
|
|
||||||
PROCESS (aclk)
|
|
||||||
|
-- Balance to exp process to avoid changing the balance value when multiplying it for the sample data
|
||||||
|
BALANCE_CALC : PROCESS (aclk)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
IF rising_edge(aclk) THEN
|
IF rising_edge(aclk) THEN
|
||||||
@@ -56,13 +57,13 @@ BEGIN
|
|||||||
ELSE
|
ELSE
|
||||||
-- Balance left and right channels
|
-- Balance left and right channels
|
||||||
IF unsigned(balance) > (BAL_MID + DEAD_ZONE) THEN
|
IF unsigned(balance) > (BAL_MID + DEAD_ZONE) THEN
|
||||||
left_channel <= to_integer((unsigned(balance) - (BAL_MID + DEAD_ZONE)) SRL BALANCE_STEP_2) + 1;
|
left_channel <= to_integer((unsigned(balance) - to_unsigned(BAL_MID + DEAD_ZONE, balance'length)) SRL BALANCE_STEP_2) + 1; -- +1 due to shift approximation defect
|
||||||
ELSE
|
ELSE
|
||||||
left_channel <= 0;
|
left_channel <= 0;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF unsigned(balance) < (BAL_MID - DEAD_ZONE) THEN
|
IF unsigned(balance) < (BAL_MID - DEAD_ZONE) THEN
|
||||||
right_channel <= to_integer(((BAL_MID - DEAD_ZONE) - unsigned(balance)) SRL BALANCE_STEP_2) + 1;
|
right_channel <= to_integer((to_unsigned(BAL_MID - DEAD_ZONE, balance'length) - unsigned(balance)) SRL BALANCE_STEP_2) + 1;
|
||||||
ELSE
|
ELSE
|
||||||
right_channel <= 0;
|
right_channel <= 0;
|
||||||
END IF;
|
END IF;
|
||||||
@@ -71,10 +72,10 @@ BEGIN
|
|||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
END PROCESS;
|
END PROCESS BALANCE_CALC;
|
||||||
|
|
||||||
-- Handle AXIS stream
|
-- Handle AXIS stream
|
||||||
PROCESS (aclk)
|
AXIS : PROCESS (aclk)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
IF rising_edge(aclk) THEN
|
IF rising_edge(aclk) THEN
|
||||||
@@ -82,7 +83,6 @@ BEGIN
|
|||||||
IF aresetn = '0' THEN
|
IF aresetn = '0' THEN
|
||||||
m_axis_tvalid_int <= '0';
|
m_axis_tvalid_int <= '0';
|
||||||
m_axis_tlast <= '0';
|
m_axis_tlast <= '0';
|
||||||
m_axis_tdata <= (OTHERS => '0');
|
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
-- Default output signals
|
-- Default output signals
|
||||||
@@ -113,6 +113,6 @@ BEGIN
|
|||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
END PROCESS;
|
END PROCESS AXIS;
|
||||||
|
|
||||||
END Behavioral;
|
END Behavioral;
|
||||||
@@ -29,6 +29,8 @@ END volume_multiplier;
|
|||||||
ARCHITECTURE Behavioral OF volume_multiplier IS
|
ARCHITECTURE Behavioral OF volume_multiplier IS
|
||||||
|
|
||||||
CONSTANT VOLUME_STEPS : INTEGER := (2 ** (VOLUME_WIDTH - 1)) / (2 ** VOLUME_STEP_2) + 1;
|
CONSTANT VOLUME_STEPS : INTEGER := (2 ** (VOLUME_WIDTH - 1)) / (2 ** VOLUME_STEP_2) + 1;
|
||||||
|
CONSTANT VOL_MID : INTEGER := 2 ** (VOLUME_WIDTH - 1); -- 512 for 10 bit
|
||||||
|
CONSTANT DEAD_ZONE : INTEGER := (2 ** VOLUME_STEP_2) / 2;
|
||||||
|
|
||||||
SIGNAL volume_exp_mult : INTEGER RANGE -VOLUME_STEPS TO VOLUME_STEPS := 0;
|
SIGNAL volume_exp_mult : INTEGER RANGE -VOLUME_STEPS TO VOLUME_STEPS := 0;
|
||||||
|
|
||||||
@@ -37,9 +39,9 @@ ARCHITECTURE Behavioral OF volume_multiplier IS
|
|||||||
BEGIN
|
BEGIN
|
||||||
-- Assigning the output signals
|
-- Assigning the output signals
|
||||||
m_axis_tvalid <= m_axis_tvalid_int;
|
m_axis_tvalid <= m_axis_tvalid_int;
|
||||||
s_axis_tready <= m_axis_tready AND aresetn;
|
s_axis_tready <= (m_axis_tready OR NOT m_axis_tvalid_int) AND aresetn;
|
||||||
|
|
||||||
-- Volume to exp
|
-- Volume to exp process to avoid changing the volume value when multiplying it for the sample data
|
||||||
PROCESS (aclk)
|
PROCESS (aclk)
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
@@ -51,7 +53,10 @@ BEGIN
|
|||||||
ELSE
|
ELSE
|
||||||
-- Volume to signed and centered and convert to power of 2 exponent
|
-- Volume to signed and centered and convert to power of 2 exponent
|
||||||
volume_exp_mult <= to_integer(
|
volume_exp_mult <= to_integer(
|
||||||
shift_right(signed('0' & volume) - to_signed(480, volume'length + 1), VOLUME_STEP_2)
|
shift_right(
|
||||||
|
signed('0' & volume) - to_signed(VOL_MID - DEAD_ZONE, volume'length + 1),
|
||||||
|
VOLUME_STEP_2
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
@@ -69,7 +74,6 @@ BEGIN
|
|||||||
IF aresetn = '0' THEN
|
IF aresetn = '0' THEN
|
||||||
m_axis_tvalid_int <= '0';
|
m_axis_tvalid_int <= '0';
|
||||||
m_axis_tlast <= '0';
|
m_axis_tlast <= '0';
|
||||||
m_axis_tdata <= (OTHERS => '0');
|
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
-- Default output signals
|
-- Default output signals
|
||||||
@@ -86,26 +90,10 @@ BEGIN
|
|||||||
-- Joystick datasheet: (y-axis) a value of 0 when it is tilted all the way down
|
-- Joystick datasheet: (y-axis) a value of 0 when it is tilted all the way down
|
||||||
-- and a value of 1023 when it is tilted all the way up
|
-- and a value of 1023 when it is tilted all the way up
|
||||||
IF volume_exp_mult >= 0 THEN
|
IF volume_exp_mult >= 0 THEN
|
||||||
m_axis_tdata <= STD_LOGIC_VECTOR(
|
m_axis_tdata <= STD_LOGIC_VECTOR(resize(shift_left(signed(s_axis_tdata), volume_exp_mult), m_axis_tdata'LENGTH));
|
||||||
shift_left(
|
|
||||||
resize(
|
|
||||||
signed(s_axis_tdata),
|
|
||||||
m_axis_tdata'LENGTH
|
|
||||||
),
|
|
||||||
volume_exp_mult
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
ELSE
|
ELSE
|
||||||
m_axis_tdata <= STD_LOGIC_VECTOR(
|
m_axis_tdata <= STD_LOGIC_VECTOR(resize(shift_right(signed(s_axis_tdata), - volume_exp_mult), m_axis_tdata'LENGTH));
|
||||||
shift_right(
|
|
||||||
resize(
|
|
||||||
signed(s_axis_tdata),
|
|
||||||
m_axis_tdata'LENGTH
|
|
||||||
),
|
|
||||||
- volume_exp_mult
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
<Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/>
|
<Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/>
|
||||||
<Option Name="EnableBDX" Val="FALSE"/>
|
<Option Name="EnableBDX" Val="FALSE"/>
|
||||||
<Option Name="DSABoardId" Val="basys3"/>
|
<Option Name="DSABoardId" Val="basys3"/>
|
||||||
<Option Name="WTXSimLaunchSim" Val="14"/>
|
<Option Name="WTXSimLaunchSim" Val="16"/>
|
||||||
<Option Name="WTModelSimLaunchSim" Val="0"/>
|
<Option Name="WTModelSimLaunchSim" Val="0"/>
|
||||||
<Option Name="WTQuestaLaunchSim" Val="0"/>
|
<Option Name="WTQuestaLaunchSim" Val="0"/>
|
||||||
<Option Name="WTIesLaunchSim" Val="0"/>
|
<Option Name="WTIesLaunchSim" Val="0"/>
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
</db_ref_list>
|
</db_ref_list>
|
||||||
<zoom_setting>
|
<zoom_setting>
|
||||||
<ZoomStartTime time="0fs"></ZoomStartTime>
|
<ZoomStartTime time="0fs"></ZoomStartTime>
|
||||||
<ZoomEndTime time="116601fs"></ZoomEndTime>
|
<ZoomEndTime time="258201fs"></ZoomEndTime>
|
||||||
<Cursor1Time time="100200fs"></Cursor1Time>
|
<Cursor1Time time="0fs"></Cursor1Time>
|
||||||
</zoom_setting>
|
</zoom_setting>
|
||||||
<column_width_setting>
|
<column_width_setting>
|
||||||
<NameColumnWidth column_width="147"></NameColumnWidth>
|
<NameColumnWidth column_width="147"></NameColumnWidth>
|
||||||
@@ -36,13 +36,13 @@
|
|||||||
<obj_property name="ObjectShortName">balance[9:0]</obj_property>
|
<obj_property name="ObjectShortName">balance[9:0]</obj_property>
|
||||||
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
</wvobject>
|
</wvobject>
|
||||||
<wvobject fp_name="/tb_balance_controller/uut/left_shift" type="other">
|
<wvobject fp_name="/tb_balance_controller/uut/left_channel" type="other">
|
||||||
<obj_property name="ElementShortName">left_shift</obj_property>
|
<obj_property name="ElementShortName">left_channel</obj_property>
|
||||||
<obj_property name="ObjectShortName">left_shift</obj_property>
|
<obj_property name="ObjectShortName">left_channel</obj_property>
|
||||||
</wvobject>
|
</wvobject>
|
||||||
<wvobject fp_name="/tb_balance_controller/uut/right_shift" type="other">
|
<wvobject fp_name="/tb_balance_controller/uut/right_channel" type="other">
|
||||||
<obj_property name="ElementShortName">right_shift</obj_property>
|
<obj_property name="ElementShortName">right_channel</obj_property>
|
||||||
<obj_property name="ObjectShortName">right_shift</obj_property>
|
<obj_property name="ObjectShortName">right_channel</obj_property>
|
||||||
</wvobject>
|
</wvobject>
|
||||||
<wvobject type="divider" fp_name="divider20">
|
<wvobject type="divider" fp_name="divider20">
|
||||||
<obj_property name="label">s_axis</obj_property>
|
<obj_property name="label">s_axis</obj_property>
|
||||||
|
|||||||
@@ -47,7 +47,7 @@
|
|||||||
<Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/>
|
<Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/>
|
||||||
<Option Name="EnableBDX" Val="FALSE"/>
|
<Option Name="EnableBDX" Val="FALSE"/>
|
||||||
<Option Name="DSABoardId" Val="basys3"/>
|
<Option Name="DSABoardId" Val="basys3"/>
|
||||||
<Option Name="WTXSimLaunchSim" Val="49"/>
|
<Option Name="WTXSimLaunchSim" Val="57"/>
|
||||||
<Option Name="WTModelSimLaunchSim" Val="0"/>
|
<Option Name="WTModelSimLaunchSim" Val="0"/>
|
||||||
<Option Name="WTQuestaLaunchSim" Val="0"/>
|
<Option Name="WTQuestaLaunchSim" Val="0"/>
|
||||||
<Option Name="WTIesLaunchSim" Val="0"/>
|
<Option Name="WTIesLaunchSim" Val="0"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user