-
melman
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 11
-
Спасибо получено: 0
-
-
|
Создавая проект SPI master столкнулся с плаванием клока по время передачи данных. Оказалось, что проблема решается, если внешний генератор подключить к одному из пинов CLK_n и в AssigmentEditor'е настроить его как GlobalClock.
Я разрезал дорожки и перекинул местами pt_right и led[7], т.е. pt_right стал PIN_62, а led[7] - PIN_75 (внес изменения в AssignmentEditor). Предложение описать доработку на сайте, чтобы все, столкнувшиеся с подобной проблемой, могли решить ее.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от melman.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
melman пишет: Создавая проект SPI master столкнулся с плаванием клока по время передачи данных. Оказалось, что проблема решается, если внешний генератор подключить к одному из пинов CLK_n и в AssigmentEditor'е настроить его как GlobalClock.
Я разрезал дорожки и перекинул местами pt_right и led[7], т.е. pt_right стал PIN_62, а led[7] - PIN_75 (внес изменения в AssignmentEditor). Предложение описать доработку на сайте, чтобы все, столкнувшиеся с подобной проблемой, могли решить ее.
А вы не пробовали менять местами с каким-нибудь другим пином или не вносить изменения в AssignmentEditor?
У меня есть подозрение, что не в этом было дело.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
melman
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 11
-
Спасибо получено: 0
-
-
|
Честно говоря, подавать клок на другой пин я не пробовал. Пробовал в AssignmentEditor для pt_right выставить Global Clock, но это не помогло. или не вносить изменения в AssignmentEditor?
- поясните, что вы имеете ввиду?
Если смотреть пины в Resource Property Editor, то там есть Input Pin to Logic Array Delay. Так вот, на всех(подключенных) входах, даже при выставленной настройке Global Clock, эта задержка есть. А на пинах CLK_n, при включенном Global Clock, задержки нет. Может в этом все дело?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от melman. Причина: дополнено
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
Вы бы поподробнее описали проблему.
На какой скорости у вас SPI?
Почему вы решили, что проблемы именно с клоком?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
melman
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 11
-
Спасибо получено: 0
-
-
|
SPI написан на verilog. Частота 1 МГц. Передача (работа SPI) начинается при нажатии кнопки. Передаю 16 бит на nanoDAC AD5601. Повторяю с частотой 8 КГц, т.е. вывожу звук 8 бит 8 КГц. На выходе ЦАП должна получиться синусоида с частотой 420 Гц.
Из клока 100 МГц делаю 1 МГц (clk) с помощью LPM_COUNTER и D-триггера. Клок SPI (sclk) получаю так: assign sclk = sclk_en ? (CPOL + CPHA + clk) : CPOL; Вывожу на пины clk и sclk (а также mosi, miso, cs).
Есть USB-осциллограф 2х60 МГц. Ставлю щупы на clk и на sclk.
При выключенной передаче клок идет нормально. Осциллограф определяет clk = 1 МГц, sclk - пусто.
Нажимаю кнопку (начинается передача). И тут самое интересное. Между посылками клок clk идет нормально, а вот в момент, когда выдается клок на ЦАП (sclk), clk плывет и sclk соответственно тоже. Плавать начинает частота и, что самое интересное, скважность (не 50%, а ~40%). И на выходе ЦАП куча гармоник.
После действий, описанных выше, этот непонятный эффект пропал и на выходе ЦАП синусоида 420 Гц (проверено осциллографом).
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
А можно схемку как вы делаете "clk", а то не очень понятно.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
melman
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 11
-
Спасибо получено: 0
-
-
|
lpmcounter_50 считает до 50, т.е. на выходе cout 2 МГц, но со скважностью не 50%. DFF уменьшает частоту вдвое и дает скважность 50%. Т.е. на выходе DFF (Inst14) частота - 1 МГц, скважность - 50%.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от melman.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
Ну наконец-то разобральсь.
Сигнал "cout" на клок триггера подавать нельзя, это выход комбинаторной логики и на нем между фронтами управляющего клока может выть все, что угодно.
Переделать вашу схему можно двумя способами, либо подать на клоки триггеров выходы старших разрядов (q[5] на inst1 и на inst2 q[6])
или вместо DFF поставить DFFE и cout завести на enable.
Да, и inst2 переделать.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
melman
-
Автор темы
-
Не в сети
-
Новый участник
-
-
Сообщений: 11
-
Спасибо получено: 0
-
-
|
Дело в том, что изначально у меня был свой делитель написанный на verilog (код приблизительный, т.к. я заменил его на lpm_counter и dff, и удалил). module div_clk
(
clk_in,
clk_out
);
input wire clk_in;
output reg clk_out = 1'b0;
parameter DIV = 20;
parameter DIV_WIDTH = 5;
reg [DIV_WIDTH-1:0] counter = 0;
always @(posedge clk_in)
begin
if(counter == DIV - 1)
begin
clk_out <= 1'b0;
counter <= 0;
end
else
begin
if(counter == DIV/2 - 1)
clk_out <= 1'b1;
counter <= counter + 1;
end
end
endmodule После возникновения проблемы с клоком, я и начал искать другие пути его получения. В констрейны пробовал вносить глобал и генерированные клоки.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
umarsohod
-
-
Не в сети
-
Администрация форума
-
-
Сообщений: 816
-
Спасибо получено: 168
-
-
|
Это правильный модуль. Вы на выходе этого модуля смотрели осциллографом?
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.167 секунд