|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
|
Verilog. Первые шаги.19.09.2013, 00:33. Показов 96701. Ответов 123
Метки нет (Все метки)
Всем привет.
Светодиодом помигал, динамическую индикацию на 7-ми сегментнике испробовал. Захотелось добавить в HelloWorld несколько последовательно соединенных двоично-десятичных счетчиков. Состряпал для этого модуль bcd счетчика. Не могу понять как его прикрутить к основному модулю. Цель: заставить бегать цифры от 0 до 9 хотя бы на одном из индикаторов. Пробовал сначала прикрутить тетрады data к отдельным счетчикам - не получилось, сейчас выделил для этого r1 - тоже ни в какую изменяться не хочет. Что я делаю не так ? module bcd_counter(CLK, DOUT); input CLK; output [3:0] DOUT; reg [3:0] data; assykn DOUT = data; always @(posedge CLK) begin if(data > 9) data = 0; else data = data + 1; end endmodule module lcd ( input wire clk, output reg [7:0] en, output reg[7:0] seg ); reg [31:0] data = h12345678; reg [31:0] counter; wire [2:0] tid_num; assykn tid_num = counter[17:15]; reg [3:0] tid; always @(posedge clk) begin counter=counter+1; end reg [3:0] r1; wire [3:0] w_r1; assykn w_r1 = r1; wire w_clk; assykn w_clk = counter[20]; bcd_counter cnt_1(w_clk, w_r1); always @(tid_num) begin case(tid_num) 0: en = 8b11111110; 1: en = 8b11111101; 2: en = 8b11111011; 3: en = 8b11110111; 4: en = 8b11101111; 5: en = 8b11011111; 6: en = 8b10111111; 7: en = 8b01111111; endcase end always @(tid_num) begin case(tid_num) 0: tid = r1[3:0]; 1: tid = data[7:4]; 2: tid = data[11:8]; 3: tid = data[15:12]; 4: tid = data[19:16]; 5: tid = data[23:20]; 6: tid = data[27:24]; 7: tid = data[31:28]; endcase end always@(tid) begin case(tid) 4b0000: seg=8b1100_0000; 4b0001: seg=8b1111_1001; 4b0010: seg=8b1010_0100; 4b0011: seg=8b1011_0000; 4b0100: seg=8b1001_1001; 4b0101: seg=8b1001_0010; 4b0110: seg=8b1000_0010; 4b0111: seg=8b1111_1000; 4b1000: seg=8b1000_0000; 4b1001: seg=8b1001_0000; 4b1010: seg=8b1000_1000; 4b1011: seg=8b1000_0011; 4b1100: seg=8b1100_0110; 4b1101: seg=8b1010_0001; 4b1110: seg=8b1000_0110; 4b1111: seg=8b1000_1110; endcase end endmodule Всё это действо для того, чтобы понять иерархию модулей. Следующим шагом хотел выделить модуль lcd в отдельный субмодуль (в духе видеокарты), чтобы отображал регистр из корневого модуля. Но пока затыка...
0
|
|
| 19.09.2013, 00:33 | |
|
Ответы с готовыми решениями:
123
Первые шаги с ATMEGA8-16PU, и первые ссадины Первые шаги Первые шаги |
|
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 170
|
|
| 26.09.2013, 11:13 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
|
| 26.09.2013, 11:17 | |
|
важен сам процесс и удовольствие от него :)
0
|
|
|
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 170
|
||
| 26.09.2013, 11:25 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
|
| 26.09.2013, 11:35 | |
|
:) ты что пристал ? не мешай творчеству. наше развитие ни от кого не отстает из находящихся на этом форуме. я играюсь для себя, для собственного удовольствия.
0
|
|
|
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 170
|
|
| 26.09.2013, 11:48 | |
|
я так просто не отстану :)
то что Вы создали, называется ripple counter. счётчик с рябью, типа. при большой разрядности такого счётчика, либо при высокой тактовой его переклинит напрочь. такие схемки ещё имеет смысл делать при проектировании ASICов, но не в FPGA с их ограниченым количеством глобальных клокодеревьев. и ещё. shurup, вот Вы говорите, что планируете кнопки там прикручивать разные, законченое функциональное устройство спроектировать собираетесь, короче. так вот, с Вашим подходом затея обречена на провал. возможно, что-то и удастся сделать, но это что-то не будет работать стабильно на более-менее приемлемых частотах.
0
|
|
|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
|
| 26.09.2013, 11:59 | |
|
bfkroup, спасибо за замечания.до законченного устройства как до китая "раком". даже задумки нет. так, детские игры пока, для того чтобы "руку набить". сижу с чашкой кофе, развлекаюсь.
0
|
|
|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
|
| 28.09.2013, 11:37 | |
|
Раскуриваю uart-велосипед PPetrovich-а.
Не понятен кусок: reg [2:0] count; always @(posedge clk) count <= count + 1; assykn clock = ~|count; Что за хитрое ~| ?
0
|
|
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 28.09.2013, 11:57 | ||
Далее - инверсия результата - ~|count.
0
|
||
|
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
|
|
| 28.09.2013, 13:35 | |
|
Скачайте с марсохода уроки по Verilog там как раз объясняют такие конструкции.
0
|
|
|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
|
| 28.09.2013, 13:39 | |
|
спасибо. Посмотрю
0
|
|
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 05.10.2013, 02:36 | ||
Ничё так, удобный приборчик. Тоже сделал дефолтной конфигурацией (во флэшке).
0
|
||
|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
||||||
| 05.10.2013, 10:17 | ||||||
|
замерь своим частотомером частоту собственного (на демо платке с ПЛИС) тактового генератора. должно показать ровно 50МГц, не больше/не меньше.
у меня всплыли замечания bfkroup (спасибо ему). изначально показывала всякую хрень в духе 49999324. BCD счетчик сделал так:
выложу свою реализацию, может пригодится новичкам, таким как и я. у меня там 8-ми разрядный 7-ми сегментный индикатор используется, ну что было распаяно не демо платке, то и использовал. [2.27 Кб]
0
|
||||||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 05.10.2013, 17:36 | ||
Правда, я "упихал" все управляющие сигналы (чтение и сброс счётчика) в один период CLK. Шесть CLK-периодов - это транжирство (шучу) :-)
0
|
||
|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
||
| 05.10.2013, 19:36 | ||
Выложи свой вариант. Интересно посмотреть как сделано, да и как c hd44780 люди работают на ПЛИС.
0
|
||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|||||||
| 05.10.2013, 22:31 | |||||||
Выложи свой вариант. Интересно посмотреть как сделаноВсё просто: счётчик, отмеряющий секундный интервал, заставляю считать на один такт больше, т.е. при частоте кварцевого генератора считать надо от 0 до 50000000. Защёлкивание значения на выходе счётчика-частотомера в параллельный регистр делаю по заднему фронту старшего разряда интервального счётчика (1 сек). Через полпериода CLK делаю сброс счётчика-частотомера. Сигнал Enable не нужен. Таким образом, на latch и risit в сумме потратился один период CLK.
0
|
|||||||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 05.10.2013, 22:41 | ||
Преимущество сегментного дисплейчика перед HD44780: <ul><li>не требует инициализации;</li><li>не требует регулировки контраста, и при том контраст великолепный;</li><li>символы крупные, читабельные;</li><li>вывод символов проще.</li></ul>
0
|
||
|
0 / 0 / 0
Регистрация: 02.05.2013
Сообщений: 170
|
|||||
| 05.10.2013, 23:47 | |||||
Ребята, ещё раз: Клоки -- не предназначены для передачи информации. Клоки -- это клоки. Shurup, тактируйте уже наконец все триггеры Вашей схемы одним клоком. между блоками -- стробы на CLK_ENABLE. Есть ещё одна тонкая проблема, которую нельзя игнорировать: сигнал, частоту которого Вы собираетесь измерять нельзя напрямую заводить в регистр, запросто можно нарваться на метастабильность. сделайте синхронизатор описав между входным пином и регистром приёмником пару последовательных триггеров.
Не стоит использовать латчи в FPGA. И да, стоит отметить, что я вообще не понимаю, как эти схемы могут работать!
0
|
|||||
|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
||||
| 06.10.2013, 01:18 | ||||
:) думаю для первого "блина" не так уж и плохо, работает. не на продажу же, учусь...
0
|
||||
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 06.10.2013, 01:45 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 04.05.2009
Сообщений: 28
|
||
| 06.10.2013, 01:54 | ||
да я их видел. но в этом случае мне придется поднимать частоту опроса входного сигнала. при 50 МГц тактовом генераторе в данном случае не получится производить замеры до 99999999 Гц (8 разрядов).
0
|
||
| 06.10.2013, 01:54 | |
|
Первые шаги с AVR
первые шаги Первые шаги первые шаги в c# Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс
Ссылка на сгенерированную музыкальную композицию:
https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013
Я говорю, что Время- как вода
течет. . .
|
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла:
Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Салют, шампанское, овации!
:drink:
|