Alexander_92 0 3 августа, 2015 Опубликовано 3 августа, 2015 · Жалоба Кто знает, подскажите, пожалуйста, как на отладочной плате Xilinx Spartan 6 задействовать аудио порты ? Какими командами или еще как. Делаю цифровой фильтр, а он работает с дискретными значениями, необходимо через АЦП/ЦАП пропускать сигналы. Спасибо !!! Может простенький пример есть, да сбросьте сюда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба на совершенно любой отладочной плате? вы бы хоть написали что за плата... из общих соображений обычно надо модуль написать что ЦАПом управляет... не помню я в спартане 6 стандартной периферии аудио порт;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexander_92 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба на совершенно любой отладочной плате? вы бы хоть написали что за плата... из общих соображений обычно надо модуль написать что ЦАПом управляет... не помню я в спартане 6 стандартной периферии аудио порт;) http://www.digilentinc.com/Products/Detail...2F40873A3BAA2F6 на вот эту, но мне бы кусочек кода на Veriloge, где понятно, как оно включается )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
likeasm 0 4 августа, 2015 Опубликовано 4 августа, 2015 · Жалоба Если я правильно понял, вам нужен контроллер для AC97 кодека. На opencores.org таковой лежит, нужно зарегистрироваться, скачать. С другой стороны разработчики отладочной платы, обычно, поставляют свое творенье с ПО для периферии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexander_92 0 5 августа, 2015 Опубликовано 5 августа, 2015 · Жалоба Если я правильно понял, вам нужен контроллер для AC97 кодека. На opencores.org таковой лежит, нужно зарегистрироваться, скачать. С другой стороны разработчики отладочной платы, обычно, поставляют свое творенье с ПО для периферии. Вот я нашёл, если есть у кого время, помогите разобраться с кодом, вроде синтаксис понимаю, но что это в железе не представляю. То есть у этого модуля по идее есть входы и выходы, но куда необходимо подключать вход/выход цифрового фильтра именно к этому контроллеру? Фильтр работает с дискретными значениями. Пожалуйста, объясните, как происходит управление ? Как только ПЛИСка прошьётся, то аудиопорты должны реагировать на входящий сигнал, если я подключу генератор, например. `timescale 1ns / 1ps module ac97_controller( input SYSCLK, // up to 125MHz input SYSTEM_RESET, // active on 1 input BIT_CLK, // 12,288 MHz input SDATA_IN, output SYNC, output SDATA_OUT, output RESET, output DONE, input [15:0] Slot0_in, input [19:0] Slot1_in, input [19:0] Slot2_in, input [19:0] Slot3_in, input [19:0] Slot4_in, input [19:0] Slot5_in, input [19:0] Slot6_in, input [19:0] Slot7_in, input [19:0] Slot8_in, input [19:0] Slot9_in, input [19:0] Slot10_in, input [19:0] Slot11_in, input [19:0] Slot12_in, output reg [15:0] Slot0_out, output reg [19:0] Slot1_out, output reg [19:0] Slot2_out, output reg [19:0] Slot3_out, output reg [19:0] Slot4_out, output reg [19:0] Slot5_out, output reg [19:0] Slot6_out, output reg [19:0] Slot7_out, output reg [19:0] Slot8_out, output reg [19:0] Slot9_out, output reg [19:0] Slot10_out, output reg [19:0] Slot11_out, output reg [19:0] Slot12_out ); parameter START_DELAY = 17'd131000; parameter WAIT_FOR_BITCLK_DELAY = 2'b11; // the states of the state machine parameter Idle = 2'b00, Load = 2'b01, // SlotS_out are loaded from Data_reg_in and Data_reg_out is loaded with SlotS_in Send = 2'b10, // Registers are shifted Wait_until_Start = 2'b11; // Lines 67-70 & 130 reg [9:0] Increment = 0; // integer Incremented is used for the bit count of a 256-bit frame, as well as SYNC's frequency reg [16:0] Var_start = 0; // incremented varialbe used to set the signal RESET at the start reg Reset_Ready; reg [1:0] Wait_for_BITCLK = 0; reg [2:0] Frame_Done_reg = 0; reg [255:0] Data_reg_out = 0; reg [255:0] Data_reg_in = 0; reg [1:0] StC = Idle; reg [1:0] StN = Idle; // If SYSTEM_RESET is 1, Var_start (used to count until RESET is deasserted to 1) is reset to 0 always @ (posedge SYSCLK) if (SYSTEM_RESET) Var_start <= 0; else if (Var_start == START_DELAY) Var_start <= Var_start; else Var_start <= Var_start + 1; always @ (posedge BIT_CLK) if (!Reset_Ready) Wait_for_BITCLK <= 0; else if (Wait_for_BITCLK == WAIT_FOR_BITCLK_DELAY) Wait_for_BITCLK <= Wait_for_BITCLK; else Wait_for_BITCLK <= Wait_for_BITCLK + 1; // RESET is 0 until the start delay is over assign RESET = (Var_start == START_DELAY) ? 1:0; always @ (posedge BIT_CLK) Reset_Ready <= (Var_start == START_DELAY) ? 1:0; // DONE always @ (posedge SYSCLK) if (StC != Load) Frame_Done_reg <= 0; else Frame_Done_reg <= {Frame_Done_reg[1:0], 1'b1}; assign DONE = (Frame_Done_reg[0]&Frame_Done_reg[1]&~(Frame_Done_reg[2])) ? 1:0; // Increment is incremeneted to 256 and then set to 1. Increment is reset to 0 only when a RESET occurs always @ (posedge BIT_CLK) if (StC == Idle) Increment <= 0; else if ((StN == Load) || (StN == Send)) if (Increment == 256) Increment <= 1; else Increment <= Increment +1 ; // SYNC will have (12,288MHz / 256) = 48KHz frequency & 20.8us period. SYNC is active while Slot0 is being sent only = for 16 BIT_CLKs assign SYNC = (((Increment < 16)&&(Increment > 0)) || (StN == Load)) ? 1:0; // Saving the data from SDATA_IN into Data_reg_in & cleaning Data_reg_in if a reset occurs. Data_reg_in must be shifted during the Load stat as well always @ (posedge BIT_CLK) if (Var_start < START_DELAY - 1) Data_reg_in <= 0; else Data_reg_in[255:0] <= {Data_reg_in[254:0], SDATA_IN}; // Data_reg_out being loaded with a new frame and shifted each BIT_CLK to be sent on SDATA_OUT always @ (posedge BIT_CLK) if (StN == Load) Data_reg_out <= {Slot0_in, Slot1_in, Slot2_in, Slot3_in, Slot4_in, Slot5_in, Slot6_in, Slot7_in, Slot8_in, Slot9_in, Slot10_in, Slot11_in, Slot12_in}; else Data_reg_out [255:0] <= {Data_reg_out[254:0], 1'b0}; // State machine always @ (posedge BIT_CLK or posedge SYSTEM_RESET) if (SYSTEM_RESET) StC <= Idle; else StC <= StN; always @ * begin StN <= StC; case (StC) Idle: if ((!SYSTEM_RESET) && (Wait_for_BITCLK == WAIT_FOR_BITCLK_DELAY)) StN <= Wait_until_Start; Wait_until_Start: if (Reset_Ready) StN <= Load; Load: StN <= Send; Send: if (Increment == 256) StN <= Load; default: StN <= Idle; endcase end assign SDATA_OUT = Data_reg_out[255]; always @ (posedge SYSCLK) begin if (StC == Load) begin Slot0_out <= Data_reg_in[255:240]; Slot1_out <= Data_reg_in[239:220]; Slot2_out <= Data_reg_in[219:200]; Slot3_out <= Data_reg_in[199:180]; Slot4_out <= Data_reg_in[179:160]; Slot5_out <= Data_reg_in[159:140]; Slot6_out <= Data_reg_in[139:120]; Slot7_out <= Data_reg_in[119:100]; Slot8_out <= Data_reg_in[99:80]; Slot9_out <= Data_reg_in[79:60]; Slot10_out <= Data_reg_in[59:40]; Slot11_out <= Data_reg_in[39:20]; Slot12_out <= Data_reg_in[19:0]; end end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться