Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА: F.A.Q. по урокам Verilog Николая К.

Re: F.A.Q. по урокам Verilog Николая К. 9 года 1 мес. назад #269

  • sl_64
  • sl_64 аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 21
  • Спасибо получено: 0
digitalinvitro СПАСИБО ЗА ВАШИ ОТВЕТЫ !
вопрос: у вас k был 16-битным k[15:0], а теперь появился еще один проводник d[16] или я что то неправильно понял?

все верно d[16] управляется от другого тригира.

может только если попробовать выход с вашего модуля определить в Global Clock?
A epm240 поддерживает Global Clock?
В общем это все только наброски (в качестве ознакомления) , а так есть задумка сделать логический анализатор + частотомер . состав устройства МАХ2+ SRAM+PIC18+WG240128

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: F.A.Q. по урокам Verilog Николая К. 9 года 1 мес. назад #270

sl_64 пишет: может только если попробовать выход с вашего модуля определить в Global Clock?
A epm240 поддерживает Global Clock?


Похоже что так.

Each MAX II device has four dual-purpose dedicated clock pins (GCLK[3..0], two
pins on the left side and two pins on the right side) that drive the global clock network
for clocking, as shown in Figure 2–13. These four pins can also be used as general-
purpose I/O if they are not used to drive the global clock network.
The four global clock lines in the global clock network drive throughout the entire
device. The global clock network can provide clocks for all resources within the
device including LEs, LAB local interconnect, IOEs, and the UFM block. The global
clock lines can also be used for global control signals, such as clock enables,
synchronous or asynchronous clears, presets, output enables, or protocol control
signals such as TRDY and IRDY for PCI. Internal logic can drive the global clock
network for internally-generated global clocks and control signals. Figure 2–13 shows
the various sources that drive the global clock network.

sl_64 пишет: В общем это все только наброски (в качестве ознакомления) , а так есть задумка сделать логический анализатор + частотомер . состав устройства МАХ2+ SRAM+PIC18+WG240128


Хорошая затея! А насколько каналов, стандартный марсоход нам много линий то не дает, только если резать. Похоже что есть общее место у нас с вами SRAM. Все таки мне кажется что с марсохода можно вытянуть пусть убогенкий МК, тогда "пикуху" тем более такую PIC18 можно бы было и не ставить. Или у пикушки другая цель?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: F.A.Q. по урокам Verilog Николая К. 9 года 1 мес. назад #272

  • sl_64
  • sl_64 аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 21
  • Спасибо получено: 0
планирую пока 8 канальный логанализатор , пик управляет еще графическим индикатором
я так думаю ,что для этого устройства я создам новую тему .

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: F.A.Q. по урокам Verilog Николая К. 8 года 11 мес. назад #437

Всем привет! Прошу сильно новичка не пинать если чего не доходит...
Вопросов будет 2:
1. есть код
// In - вход канала
// Clock -  вход 100 МГц

module cxema(
	Clock,
	In1,
	In2,
	In3,
	In4,
	In5,
	In6,
	In7,
	In8,
	q
);
input In1;
input In2;
input In3;
input In4;
input In5;
input In6;
input In7;
input In8; 
input Clock;
output q;
wire [7:0] s;
reg [7:0]prev_signal;

always @(posedge Clock)
begin
	prev_signal[0] <= In1;
	prev_signal[1] <= In2;
	prev_signal[2] <= In3;
	prev_signal[3] <= In4;
	prev_signal[4] <= In5;
	prev_signal[5] <= In6;
	prev_signal[6] <= In7;
	prev_signal[7] <= In8;
end

assign s[7:0] = prev_signal[0] ^ In1 | prev_signal[1] ^ In2 | prev_signal[2] ^ In3 | prev_signal[3] ^ In4 | prev_signal[4] ^ In5 | prev_signal[5] ^ In6 | prev_signal[6] ^ In7 | prev_signal[7] ^ In8;

assign q = (s[0] | s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7]);

endmodule
Как его можно упростить? Пробовал писать типа [7:0], но столкнулся с тем, что у меня реальных 8 входов и как их все на одну шину "посадить" не знаю. У меня проект составной - часть на Verilog'е, часть графически. То что на verilog'е затем компилируется в графический "inst" и составляется в основном окне проекта.

2. Если исключить из проекта
assign q = (s[0] | s[1] | s[2] | s[3] | s[4] | s[5] | s[6] | s[7]);
то диаграмма на симуляторе будет хорошая, но с этими ИЛИ (объединяющими 8 каналов в 1 выходной) беда прямо! На выходе в нужных местах есть импульсы, а в промежутке, где по идее должен быть "0", пишет "Uninitialized". При этом, если выход подключить к одному из s[7..0], то на нём порядок - есть нормальные импульсы с "1" и "0", ИЛИ их почему то портит. Из-за чего такое может быть и как это победить?
Спасибо.
скрин
"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Серый Волк. Причина: скрин

Re: F.A.Q. по урокам Verilog Николая К. 8 года 11 мес. назад #438

Проводники в шине можно и обычным ИЛИ объединить
assign q = |s[7:0];

или так
assign q = |s;

ИЛИ их портит потому что это выхода триггеров, а Вы их не сбросили или не установили асинхронным set или reset. Состояние триггеров не определено без инициализации. Вообще то в FPGA или CPLD все триггера по включению питания сбрасываются в ноль, но инициализация желательна.
always @(posedge Clock or negadge reset)begin
 if(!reset)
        prev_signal <= 0;
 else
	prev_signal <= {In1,In2,In3,In4,In5,In6,In7,In8};
 end  
end

Сигнал асинхронного сброса завидите в input модуля.

Кстати на асинхронный сброс квартус может выругаться потому что по его мнению асинхронный сигнал должен быть активен хотя бы в течении одного такта сигнала синхронизации, поэтому предпочтителен синхронный сброс или установка триггеров (для этого сигнал сброса нужно вывести из списка чувствительности always).

always @(posedge Clock)begin
 if(!reset)
        prev_signal <= 0;
 else
	prev_signal <= {In1,In2,In3,In4,In5,In6,In7,In8};
 end  
end

В обоих случаях сигнал reset инициализирует триггеры своим низким уровнем.

А вот этой строчки приглядевшись вообще не понял (тут должно было квартусом генерироваться сообщение о нарушение разрядности)

assign s[7:0] = prev_signal[0] ^ In1 | prev_signal[1] ^ In2 | prev_signal[2] ^ In3 | prev_signal[3] ^ In4 | prev_signal[4] ^ In5 | prev_signal[5] ^ In6 | prev_signal[6] ^ In7 | prev_signal[7] ^ In8;


У Вас получается один единственный проводник в правой части, а в левой шина из семи проводников. Может быть Вы хотели так?
assign s[7:0] = prev_signal ^ {In1,In2,In3,In4,In5,In6,In7,In8};
Спасибо сказали: Серый Волк

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от digitalinvitro.

Re: F.A.Q. по урокам Verilog Николая К. 8 года 11 мес. назад #439

Ахаха! Извините пожалуйста за мою глупость. :lol:
Я же не подлючил остальные входы - вот они и дали "Uninitialized".
Теперь всё нормально!

Кстати, если заменить
assign s[7:0] = prev_signal[0] ^ In1 | prev_signal[1] ^ In2 | prev_signal[2] ^ In3 | prev_signal[3] ^ In4 | prev_signal[4] ^ In5 | prev_signal[5] ^ In6 | prev_signal[6] ^ In7 | prev_signal[7] ^ In8;
на
assign s[7:0] = prev_signal[7:0] ^ {In1,In2,In3,In4,In5,In6,In7,In8};
работает неправильно :(
"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Серый Волк.
  • Страница:
  • 1
  • 2
Время создания страницы: 0.277 секунд
Работает на Kunena форум