реклама на сайте
подробности

 
 
> Сброс SPI (Verilog), Начальное состояние триггеров
estel23
сообщение Sep 9 2015, 15:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 30-09-13
Пользователь №: 78 536



Добрый день уважаемые, хочу поделиться моей проблемой.

Имеется SPI Slave, вот код:

Код
module SPIslave(
    input wire RESET,
    input wire CSIN,
    input wire SCKIN,
    input wire MOSIIN,
    output wire MISOOUT,
    output reg [15:0] DATAOUT,
    );

reg [15:0] data;
reg [4:0] count;

assign MISOOUT = data[15];

always @ (negedge SCKIN)
    if (RESET & ~CSIN)
        data <= { data[14:0], MOSIIN };
        

always @ (posedge SCKIN)
    if (~RESET | CSIN)
        count <= 5'b00000;
    else
        count <= count + 1'b1;

always @ (count[4])
    DATAOUT <= data

endmodule


Вся проблема в RESETe. Хочу обходиться без лишних ног, ибо на CPLD итак много всего.
Если уберу из кода RESET, то счетчик начинает считать не с начала условий, под которые он подписан.
Т.е. Подаю клок, потом подаю CSIN = 1 (до этого она в нуле). Далее отпускаю CSIN = 0, но счетчик не начинает считать. И только по прошествии 7 - 8 клоков оживает.
Я думал что при включении питания CPLD выставляет все в "0", но получше глянув в Post-моделировании заметил что не все в нуле.

Мож я чет не понимаю? На Verilogе сижу не долго и прошу помощи у экспертов.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Sep 25 2015, 07:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Ох....
Ну если вы схемотехник то вам должно быть знакомо понятие сдвиговые регистры...


Код
if(SS_CPLD==1)
      nBit <= 5'b00000;
    else if (SS_CPLD==0)


else if не надо, это только синтезатор путает. Стандартная конструкция с асинхронным сбросом или установкой

Код
always @(posedge clk or posedge reset)
if(reset == ....)
....
else
....


у вас CS выступает как асинхронный сброс и установка, потому просто else , если бы в блоке был и сброс и установка, else if был бы уместен для приоритетов, а так уберите...



раздел
Цитата
//выбор регистра, запись/чтение
очень сложно написан, у вас вообще одно и тоже по 10 раз в проекте делается
вы представляете что когда вы пишите вот так

Код
case (nBit)
                      8: REG02[7] = MOSIIN;
                      9: REG02[6] = MOSIIN;
                     10: REG02[5] = MOSIIN;
                     11: REG02[4] = MOSIIN;
                     12: REG02[3] = MOSIIN;
                     13: REG02[2] = MOSIIN;
                     14: REG02[1] = MOSIIN;
                     15: REG02[0] = MOSIIN;


вы получаете мультиплексор, который выбирает 1 бит, потом 2, потом 3. При этом у вас еще один мультиплексор прямо сразу по выбору case (keyreg). Иногда синтезатор понимает ваш хитрый план и сам ставить сдвиговые регистры, но иногда это остается мультиплексорами, съедает кучу ресурсов и очень медленно работает... А у вас их еще и 3 независимых может выйти... даже вернее 6, если не 9....


Если хотите можем совместно принести это в порядок по пунктам вам надо написать модуль SPI
который читает и передает 1 байт.
и дальше сделать просто принять байт, по принятому байту выбрать адрес чтения и записи, и еще раз принять или записать байт.





как кстати вы определяете что в данном такте делается, читается или передается?
Как я понимаю другого клока кроме SPI в проекте нет?
Go to the top of the page
 
+Quote Post
estel23
сообщение Sep 25 2015, 07:43
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 30-09-13
Пользователь №: 78 536



Цитата(Golikov A. @ Sep 25 2015, 11:03) *
как кстати вы определяете что в данном такте делается, читается или передается?
Как я понимаю другого клока кроме SPI в проекте нет?


По данным с COM-порта я вижу какие данные и в какой регистр уходят и приходят, ну и сравниваю с показателями осцилла.


Цитата(Golikov A. @ Sep 25 2015, 11:03) *
Если хотите можем совместно принести это в порядок по пунктам вам надо написать модуль SPI
который читает и передает 1 байт.
и дальше сделать просто принять байт, по принятому байту выбрать адрес чтения и записи, и еще раз принять или записать байт.


А нужно мне сделать обмен по SPI вот этого модуля (см. файл).
Там на 18 странице показана структура, а на 30 странице - регистры.

Я согласен что мой код кривоват, но он по крайней мере передает и принимает правильную информацию.
На рисунке RW - запись/чтение, биты А1, А0 - выбор регистра.





Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  FMC12x_user_manual.pdf ( 1.11 мегабайт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- estel23   Сброс SPI (Verilog)   Sep 9 2015, 15:23
- - EvgenyNik   Мастер-устройство работать с CS будет по словам (т...   Sep 9 2015, 15:44
|- - estel23   Цитата(EvgenyNik @ Sep 9 2015, 19:44) Мас...   Sep 9 2015, 15:49
- - EvgenyNik   Выведите состояние регистра на внешние пины (как с...   Sep 9 2015, 19:12
- - Golikov A.   Сдается мне что дело не в ресете.... конечно при н...   Sep 10 2015, 07:07
|- - estel23   Цитата(Golikov A. @ Sep 10 2015, 11:07) С...   Sep 10 2015, 07:42
|- - EvgenyNik   Цитата(estel23 @ Sep 10 2015, 10:42) ТАм ...   Sep 10 2015, 07:55
|- - estel23   Цитата(EvgenyNik @ Sep 10 2015, 11:55) Ни...   Sep 10 2015, 08:05
- - Golikov A.   Множество SPI slave режимов реализуются при асинхр...   Sep 10 2015, 08:14
- - EvgenyNik   Вариант: выкинуть SC18IS602IPW, подставив вместо н...   Sep 10 2015, 10:12
|- - estel23   Цитата(EvgenyNik @ Sep 10 2015, 14:12) Ва...   Sep 10 2015, 11:24
- - Golikov A.   в CPLD асинхронный сброс возможен? Кодalways @ ...   Sep 10 2015, 12:26
|- - estel23   Цитата(Golikov A. @ Sep 10 2015, 16:26) в...   Sep 23 2015, 13:37
- - Golikov A.   ЦитатаPLD работает когда начальная установка MISO ...   Sep 23 2015, 16:50
|- - estel23   Вообщем не могу правильно передавать биты во время...   Sep 24 2015, 08:27
- - Golikov A.   ЦитатаПоложение MISO важно, т.к. если я его оставл...   Sep 24 2015, 09:30
|- - estel23   Цитата(Golikov A. @ Sep 24 2015, 13:30) M...   Sep 24 2015, 09:44
- - Genadi Zawidowski   Выход слейва - MISO - в каждом слейве дожден прохо...   Sep 24 2015, 09:53
|- - estel23   Цитата(Genadi Zawidowski @ Sep 24 2015, 13...   Sep 24 2015, 09:55
- - Genadi Zawidowski   OE буфера не должен ничем стробироваться, просто у...   Sep 24 2015, 10:00
|- - estel23   Цитата(Genadi Zawidowski @ Sep 24 2015, 14...   Sep 24 2015, 10:07
|- - EvgenyNik   Цитата(estel23 @ Sep 24 2015, 13:07) АЦП,...   Sep 24 2015, 13:53
|- - estel23   Цитата(EvgenyNik @ Sep 24 2015, 17:53) А ...   Sep 24 2015, 14:28
- - Golikov A.   есть вещи которые я не понимаю и не смогу понять н...   Sep 24 2015, 19:49
|- - estel23   Цитата(Golikov A. @ Sep 24 2015, 23:49) е...   Sep 25 2015, 06:30
- - Golikov A.   ЦитатаЯ согласен что мой код кривоват, но он по кр...   Sep 25 2015, 09:00
- - estel23   Цитата(Golikov A. @ Sep 25 2015, 13:00) т...   Sep 25 2015, 09:25


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 01:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016