Перейти к содержанию
    

Verizon

Участник
  • Постов

    29
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Verizon

  • Звание
    Участник
    Участник
  1. В симуляторе все правильно. Да вот собственно uart приемник который не всегда работает правильно entity uartrx is generic( DBIT : integer := 8; SB_TICK : integer := 16; CLKGEN : integer := 55555556; BAUDRATE : integer := 115200 ); port( clk, reset : in std_logic; rx : in std_logic; tick : in std_logic; rx_done_tick : out std_logic; dout : out std_logic_vector(7 downto 0) ); end uartrx; architecture behavioral of uartrx is -- определение полпериода частоты бод ("-1" - чуть чаще для надежного приема) constant max_count : integer := (((CLKGEN / BAUDRATE)/(2*8)) - 1); -- частота бод signal s_tick : std_logic; type state_type is (idle, start, data, stop); signal state_reg, state_next: state_type; signal s_reg, s_next: unsigned(3 downto 0); signal n_reg, n_next: unsigned(2 downto 0); signal b_reg, b_next: std_logic_vector(7 downto 0); begin -- если счетчик досчитал до max_count -- то s_tick <= '1' process(clk, reset) variable cnt : integer range 0 to max_count; begin if reset = '0' then s_tick <= '0'; cnt := 0; elsif clk'event and clk = '1' then if cnt = max_count then cnt := 0; s_tick <= '1'; else cnt := cnt + 1; s_tick <= '0'; end if; end if; end process; process(clk, reset) -- FSMD state and data regs. begin if (reset = '0') then state_reg <= idle; s_reg <= (others => '0'); n_reg <= (others => '0'); b_reg <= (others => '0'); elsif (clk'event and clk='1') then state_reg <= state_next; s_reg <= s_next; n_reg <= n_next; b_reg <= b_next; end if; end process; -- next state logic process (state_reg, s_reg, n_reg, b_reg, s_tick, rx) begin state_next <= state_reg; s_next <= s_reg; n_next <= n_reg; b_next <= b_reg; rx_done_tick <= '0'; case state_reg is when idle => if (rx = '0') then state_next <= start; s_next <= (others => '0'); end if; when start => rx_done_tick <= '0'; if (s_tick = '1') then if (s_reg = 15) then state_next <= data; s_next <= (others => '0'); n_next <= (others => '0'); else s_next <= s_reg + 1; end if; end if; when data => if (s_tick = '1') then if (s_reg = 15) then s_next <= (others => '0'); b_next <= rx & b_reg(7 downto 1); if (n_reg = (DBIT - 1)) then state_next <= stop; else n_next <= n_reg + 1; end if; else s_next <= s_reg + 1; end if; end if; when stop => rx_done_tick <= '1'; if (s_tick = '1') then if (s_reg = (SB_TICK-1)) then state_next <= idle; else s_next <= s_reg + 1; end if; end if; end case; end process; dout <= b_reg; end behavioral;
  2. Частота задана верно. Так клок один - clk Хотя Не понятно какие остальные 12? Где искать их названия? Может эти Если это они, то что нужно прописать, например для chirp:uchirp|s_carry, если это перенос счетчика, который используется далее как gated_clock? В схеме имеются несинхронные процессы, но к ним нет претензий у Time Quest. Причину пока не понимаю. Сигнал, вернее выходной порт cnd_rxdntisc_out както, если можно так сказать, не стыкуется с тактовой частотой clk.
  3. При дальнейшем развитии схемы Time Quest выдает предупреждения только по поводу портов. ModelSim таки поймал одно несоответствие # ** Warning: */DFFEAS HOLD Low VIOLATION ON DATAIN WITH RESPECT TO CLK; # Expected := 0.212 ns; Observed := 0.035 ns; At : 522606.264 ns # Time: 522606264 ps Iteration: 1 Instance: /test_vhd_tst/i1/\uuartrx|state_reg.idle\ # ** Warning: */DFFEAS HOLD High VIOLATION ON DATAIN WITH RESPECT TO CLK; # Expected := 0.212 ns; Observed := 0.099 ns; At : 522606.328 ns # Time: 522606328 ps Iteration: 1 Instance: /test_vhd_tst/i1/\uuartrx|s_reg[0]\ Как теперь это побороть с помощью скриптов sdc?
  4. Time Quest без sdc Создан sdc и подключен к проекту с записью derive_clock_uncertainty create_clock -period 55555556Hz -name {clk} [get_ports {clk}] Теперь после компиляции Time Quest При этом очевидно изменилась разводка проекта - изменилось количество задействованых элементов. Ошибок нет. Разве, что несконстрейненые порты. Какие конкретно порты и как их констрейнить пока не понимаю. Может кто коротко пояснить каким образом две строчки в sdc файле так кардинально повлияли на разводку проекта?
  5. Читаю. С трудом понимаю о чем речь и как sdc скрипты помогут справиться с проблемными местами. Ошибки в проекте увидел. Не успевает один из счетчиков переключаться на 0.39ns. Хотя ModelSim все крутит правильно.
  6. Ограничения это какраз и есть sdc файл. Можно подробнее. Какие основные ограничения нужны стандартному цифровому проекту где имеется RAM и обвъязка? В общих чертах. Нужно анализировать что говорит Time Quest после компиляции?
  7. Да, придется. Будет правильнее. Хотя простая смена работы регистров не по спаду, а по фронту помогла. Но наверняка не надолго. При дальнейшем развитии схемы все может повториться.
  8. Ну вобщем так оно и есть. При добавлении в схему процессов все меняется, нерабочий участок начинает работать. И все же как выглядит пример sdc для небольшой задержки фронта.
  9. Имеется внутренний сигнал меандр типа (s_rd_korr) частотой 55 мГц по фронтам и спадам которого выполняются действия 1 - чтение данных из памяти 2 - сравнение и суммирование данных. ПЛИС CycloneIII 8 ns. Модельсим показывает желтыми штрихами ошибки некоторых из этих действий. Можно-ли через sdc файл немного сдвинуть (задержать) фронт (спад) сигнала на 5..7 ns. Если это возможно подскажите пожалуйста примером для sdc файла.
  10. Имеется КИХ фильтр постоенный в ПЛИС. Количество значащих коэффициентов 26. Входной сигнал имеет размерность 12 бит со знаком. Коэффициенты имеют размерность 16 бит со знаком. Выходной результат, с учетом того, что максимальное значение коэффициента = 2577, будет занимать размерность 28 бит. Как в этом случае правильно воспользоваться данными фильтра в размерности 16 бит со знаком?. Беру 27...12 биты. Это простейшее масштабирование. В этом случае просто отбрасываются младшие 12 бит. Можно-ли както смаштабировать или нормализовать данные к 16 битам с учетом всех 28 бит? Насколько это будет корректнее или нет по сравнению с простейшим масштабированием?
  11. Да. Сигнал именно дифференциальный синусоидальный. Спасибо. Теперь я уверен, что меряю все правильно.
  12. Спасибо. Есть некоторая неуверенность в понимании. Допустим выборка сделана так что на Vin+ в момент выборки попала положительная полуволна синусоиды уровнем 0.5 V. Тогда на Vin- должа будет попасть отрицательная полуволна и амплитуда там буде -0.5 V Я так понимаю разница должна быть равна 0.5 - (-0.5) = 1 V. Правильно я понял?
  13. Имеется ADC AD7266 http://www.analog.com/media/en/technical-d...eets/AD7266.pdf Подключен для работы в полном дифференциальном режиме. Тоесть цена младшего бита равна 4 Ч V REF/4096 При V REF = 2.5 V это будет 2.44 mV Делал так: от батарейки подавал на АЦП (между двумя дифф. входами) 1 V - получал код 0x0199 (409). При этом на Vin+ подавал '+' входного напряжения на Vin- '-' Если подавать наоборот то код будет 0xFE67 тоесть -409 Если сигнал подается между двумя дифференциальными входами то какое напряжение тогда меряет АЦП? Если подавать синусоиду то получается будет измерен ее размах между дифф. входами. А единица в 12_ом бите будет говорить о том в каком полупериоде сделана выборка в положительном или отрицательном. Насколько справедливо это утверждение?
  14. Имеется код Delay and Sum бимформера для двух сенсоров. Код дан как приложение к статье http://www.google.com/url?sa=t&rct=j&a...kA4pTsNACkZq0ZA %% INITIALIZE clear all; close all; clc; %Properties of the phone d = 0.12; % Distance between the mics N = 2; % Amount of mics % Physicalconstants c = 343; % Speed of sound in air % Properties of the signal freq = 300; % The frequency of the source signal freq2 = 600; % The frequency of the noise signal theta = pi; % Angle of the source signal theta2 = 2*pi/9; % Angle of the noise signal % Our chosen properties fs = 80000; % Sample frequency time_frame = 0.02; % Duration of 1 time frame sptf = fs * time_frame; % The amount of samples per time frame noise_amp = 0.1; % The noise amplitude L = 2^ (ceil(log2(sptf))); % The power of 2 for the FFT totaltime = 1; % The total time of the signal %% INPUT SIGNAL tt = linspace (0, totaltime, fs * totaltime).'; % Samples till total time tau1 = d/c * sin(theta); % Time delay to mic 2 for signal tau2 = d/c * sin(theta2); % Time delay to mic 2 for noise signal = sin (2 * pi * freq * tt); % Signal mic 1 signal2 = sin (2 * pi * freq * (tt - tau1)); % Signal mic 2 noise = 4 * sin(2 * pi * freq2 * tt) + noise_amp * randn(totaltime * fs, 1); % Noise mic 1 noise2 = 4 * sin(2 * pi * freq2 * (tt - tau2)) + noise_amp * randn(totaltime * fs, 1); % Noise mic 2 signal_total = signal + noise; % Sum of the signal and noise at mic 1 signal_total2 = signal2 + noise2; % Sum of the signal and noise at mic 2 x1 = [signal, signal2]; xsum = [signal_total, signal_total2]; f_center = linspace(0, fs - fs/(2 * L), L).'; % The center frequencies for each bin zeta = -1i * 2 * pi * f_center * d * sin(theta)/c; % The phase shift of the signal for mic 2 a_n = 1/N; % The amplitude weights w = a_n * [(exp(zeta)), ones(L, 1)]; % Weights with delays %% RECONSTRUCTING THE ORIGINAL SIGNAL nr_frames = floor((length(signal)-sptf)/(sptf/2)); rec_signal = zeros(size(signal(:, 1))); rec_signal_total = zeros(size(signal_total(:, 1))); testsignal1 = zeros(L, nr_frames); testsignal2 = zeros(L, nr_frames); for I = 1 : nr_frames win = [sqrt(hanning(sptf)), sqrt(hanning(sptf))]; frame_x1 = x1((sptf/2)*(I-1)+1:(sptf/2)*(I-1)+sptf , :).*(win); fft_x1 = fft (frame_x1, L); frame_xsum = xsum((sptf/2)*(I-1)+1:(sptf/2)*(I-1)+sptf, :).*(win); fft_xsum = fft(frame_xsum, L); fft_xsum (end, :) = real(fft_xsum(end, :)); fft_x1([1, L/2 + 1], :) = real(fft_x1([1, L/2 + 1], :)); part1 = fft_x1(1 : L/2 + 1, :); fft_x1 = [part1; conj(flipud(part1(2 : end - 1, :)))]; fft_xsum ([1, L/2 + 1], :) = real(fft_xsum([1, L/2 + 1], :)); part1 = fft_xsum (1 : L/2 + 1, :); fft_xsum = [part1; conj(flipud(part1 (2 : end - 1, :)))]; estimate_fft_signal = w .* (fft_x1); estimate_fft_signal_2 = estimate_fft_signal(:, 1) + estimate_fft_signal(:, 2); estimate_fft_signal_total = w .* (fft_xsum); estimate_fft_signal_total_2 = estimate_fft_signal_total(:, 1) + estimate_fft_signal_total(:, 2); testsignal2(: , I) = estimate_fft_signal_total_2; testsignal1(: , I) = fft_xsum(: , 1); estimate_signal = real(ifft(estimate_fft_signal_2)); estimate_signal_total = real (ifft(estimate_fft_signal_total_2)); rec_signal((sptf / 2) * (I - 1) + 1 : ( sptf / 2) * (I - 1) + sptf ) = rec_signal((sptf / 2) * (I - 1) + 1 : (sptf/2) * (I - 1) + sptf) + estimate_signal(1 : sptf) .* (sqrt(hanning(sptf))); rec_signal_total((sptf / 2) * (I - 1) + 1 : (sptf / 2) * (I - 1) + sptf) = rec_signal_total((sptf / 2) * (I - 1) + 1 : (sptf / 2) * (I - 1) + sptf) + estimate_signal_total(1 : sptf) .* (sqrt(hanning(sptf))); end %% PLOTS % Time plot t = linspace(0 , totaltime , totaltime * fs); figure; subplot (2, 1, 2) plot (t, real(signal_total2(1 : totaltime * fs))); hold on plot (t , real( rec_signal_total(1 : totaltime * fs)), '.-r'); plot (t , real( signal2(1 : totaltime * fs)), '-g'); legend ('nois y in', 'beamformed', 'desiredin') title ('Incoming, beamformed and desired signals') axis ([0.2000 0.210 -5 5]); xlabel('Time(inseconds)'); ylabel('Amplitude'); % Fr equency plot subplot (2, 1, 1) plot (linspace(1, fs, L), 10 * log10(mean(abs(testsignal1).^2, 2))); hold on plot (linspace(1, fs, L), 10 * log10 (mean(abs(testsignal2).^2, 2)), 'r'); title ('Spect rum plot s of in signal and signal after beamforming i n dB') legend ('insignal', 'beamformed signal') axis ([0 4000 10 50]); xlabel ('Fr equency(inHertz)'); ylabel ('Magnitude(in dB)'); % Polarplot figure; polarfreq = [300, 600]; polarbin = zeros(1, length(polarfreq)); for I = 1 : length (polarfreq); polarbin (I) = floor(polarfreq(I)/fs * L); delta = ((c / f_center(polarbin(I))) / d )^ -1; [w_dakje, polarhoek] = beam_resp(w(polarbin(I), :), L, delta); subplot (ceil(length(polarfreq) / 2), 2, I) polar90 (polarhoek, abs(w_dakje)); title (['Fr equency =', num2str (polarfreq(I))]) end Матлаб на % Polarplot выдает ошибку типа Undefined function 'beam_resp' for input arguments of type 'double'. Error in DelayAndSum (line 122) [w_dakje, polarhoek] = beam_resp(w(polarbin(I), :), L, delta); Подскажите пожалуйста, что не так и как исправить.
  15. Все так. Путаница в терминах. Тема про так называемый "коэффициент усиления", который при разном представлении коэффициентов может быть сильно разный. Сомнения только по поводу термина "коэффициент усиления". Кстати, а коэффициент передачи ЦФ может быть больше 1?
×
×
  • Создать...