помогите с VERILOG

Программируемая логика - это не так уж и сложно. Разберемся вместе.
sobs
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт авг 09, 2013 15:16:14

Re: помогите с VERILOG

Сообщение sobs »

Сейчас нету ни отладчика ни платы под рукой. Попробуйте организовать программу так. (Написал в блокноте)
Спойлер

Код: Выделить всё


//уберите reg перед LCD_dclk
output LCD_dclk;

//в запускающем алвайс блоке надо сделать импульс
//1 такт
start <= 1;
//1 такт
start <= 0;

//далее попробуте организовать так
reg key;
reg state;

assign LCD_dclk = (key) ? clk_1k : 0;

 always @(posedge clk_1k)    //такт одна микросекунда
    begin
        
        case(state)
          0: begin
            if (start) 
            begin
                state <= 1;
                LCD_massiv_count <= 0;    
            end
          end
          1: begin
            if(LCD_massiv_count <= 72)
            begin
               LCD_din  <= LCD_massiv[LCD_massiv_count];
               LCD_massiv_count <= LCD_massiv_count + 1;
               key <= 1;               
            end else begin
                state <= 0;
                key <= 0;
            end
          
          end    
        endcase

    end 

Реклама
Аватара пользователя
WolfTheGrey
Потрогал лапой паяльник
Сообщения: 370
Зарегистрирован: Вс май 06, 2012 09:58:33
Откуда: Магадан

Re: помогите с VERILOG

Сообщение WolfTheGrey »

Verilog как шахмоты, научившись ходить, не значит что научился играть. От таком раскладе я чето не подумал. Сейчас обкатан такой драйвер непрерывной работы:
Спойлер

Код: Выделить всё

	  // LCD_driver
 always @(posedge clk_1k)    //такт одна микросекунда
	begin
		if(LCD_massiv_count <= 72)
		  begin 
		    LCD_load = 0;
			 if(LCD_dclk == 0)              // если на ноге LCD_clk = 0, то прогнать драйвер, если 1 то установить ноль.
			   begin
				   #1000 LCD_din  = LCD_massiv[LCD_massiv_count];
			           #1000 LCD_massiv_count = LCD_massiv_count + 1;
				   #1000 LCD_dclk = 1;
						
				 end 
		     else  LCD_dclk = 0;
		  end 
		else 
		  begin LCD_massiv_count <= 1; LCD_load = 1; end 			 
	end 
Оказывается от функциях я ни чего не знаю. Если в LCD_massiv написать какое то число то оно полностью отобразится на экране, а вот если прогнать такую строчку:
Спойлер

Код: Выделить всё

always @(clk_1c) 
  begin  
      LCD_massiv[8:0] = encoder_binaru(min); 
      LCD_massiv[17:9] = encoder_binaru(d_min);
      LCD_massiv[26:18] = encoder_binaru(xors);
      LCD_massiv[35:27] = encoder_binaru(d_xors);
  end

 function reg[9:0] encoder_binaru; input wire[4:0] decimal; 
    
	 case(decimal)
	    0: encoder_binaru = 9`b110111100;
		 1: encoder_binaru = 9`b000001100;
		 2: encoder_binaru = 9`b111011000;
		 3: encoder_binaru = 9`b101011100;
		 4: encoder_binaru = 9`b001101100;
		 5: encoder_binaru = 9`b101110100;
		 6: encoder_binaru = 9`b111110100;
		 7: encoder_binaru = 9`b000011100;
		 8: encoder_binaru = 9`b111111100;
		 9: encoder_binaru = 9`b101111100;
	   10: encoder_binaru = 9`b000000000;
		default: encoder_binaru = 9`b111111111;
	 endcase 
  
  endfunction

Вроде и ПДФ американский скачал, чтоб посмотреть как это пишется, все равно результат один, записывается только первый бит. Остальные нули.

И добавил......................

Меня вот что вымораживает: Если весь алвайс блок заменить на дону строчку LCD_massiv <= LCD_massiv + 1; // прогнать все пиксели - Проект занимает 200 вентилей. Проект работает исправно.
А без этой строчки, с CASE блоком, со счетчиками, тригерами и в 100 раз навешаной лубуды, занимает всего 80 вентилей. и фигню какую то показывает.
:facepalm: я ужже незнаю что делать :facepalm:

Изображение
Реклама
sobs
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт авг 09, 2013 15:16:14

Re: помогите с VERILOG

Сообщение sobs »

В этом и отличие от простого программирования. Тут Вы описываете схему - а не просто алгоритм. Поэтому надо смотреть warning'и и после компиляции желательно зайти в RTL Viewer и посмотреть получившуюся схему.
Аватара пользователя
WolfTheGrey
Потрогал лапой паяльник
Сообщения: 370
Зарегистрирован: Вс май 06, 2012 09:58:33
Откуда: Магадан

Re: помогите с VERILOG

Сообщение WolfTheGrey »

И это ни как не отключить? У любого компилятора по идее должно настраиваться степень ужатия кода, что у C#, что у АВР, это есть.
Я блин двое суток пытался упорядочить рыбок в аквариуме. Вкурсе что рыбки за лазерной указкой бегают как и кошаки???


Хорошая статья Вы это знали?
Операторы присваивания в Verilog делятся на блочное «=" и внеблочное «<=". Блочное присваивание выполняется сразу, в том месте, где оно встретилось, причем переменная меняет свое значение мгновенно и это может происходить неоднакратно в одной ветви алгоритма. Внеблочное присваивание изменяет значение переменной только в момент выхода из блока.
Реклама
Эиком - электронные компоненты и радиодетали
sobs
Открыл глаза
Сообщения: 44
Зарегистрирован: Пт авг 09, 2013 15:16:14

Re: помогите с VERILOG

Сообщение sobs »

Нет, про рыбок не вкурсе :))
Подход в программировании ПЛИС сильно отличается от обычного программирования. Вы описываете схему. Почитайте тут http://marsohod.org/index.php/verilog тоже полезные статьи. Про блокирующие и не блокирующие присваивания знал 8)
Реклама
mikhail_kmm61
Родился
Сообщения: 13
Зарегистрирован: Вс окт 07, 2012 20:12:58

Re: помогите с VERILOG

Сообщение mikhail_kmm61 »

WolfTheGrey писал(а):И это ни как не отключить?
Вы как раз и отключили,только не то, что надо.Вот это: encoder_binaru -у Вас отсутствует в описании входов и выходов модуля.Это же должны быть входы,правильно?
Реклама
mikhail_kmm61
Родился
Сообщения: 13
Зарегистрирован: Вс окт 07, 2012 20:12:58

Re: помогите с VERILOG

Сообщение mikhail_kmm61 »

Извините,я неправ.Глупость написал.
Аватара пользователя
WolfTheGrey
Потрогал лапой паяльник
Сообщения: 370
Зарегистрирован: Вс май 06, 2012 09:58:33
Откуда: Магадан

Re: помогите с VERILOG

Сообщение WolfTheGrey »

Интересно, как люди пишут сложнейшие прогрммы? если тут в трех соснах обломался. Вроде код написан по всем правилам.
А еще в квартусе не работает логический анализатор SignalTap, видишлите отключена функция TalkBack. А чтоэто и где ее найти чтоб включить в интернете так и не нашел. Хотя я на эту функцию возлогал много надежд. Функция должна была быть моими глазами в происходящих внутрисхемных процессах.
MisterDi
Встал на лапы
Сообщения: 85
Зарегистрирован: Сб мар 13, 2010 13:52:10

Re: помогите с VERILOG

Сообщение MisterDi »

А еще в квартусе не работает логический анализатор SignalTap, видишлите отключена функция TalkBack.
SignalTap к TalkBack не имеет никакого отношения.
SignalTap включается галочкой в окне свойств проекта и требует перекомпиляции проекта, а TalkBack включается Tools-Options-Internet Connectivity. TalkBack - служба статистики Альтеры и ни на что не влияет
misterdi<@>i.ua
Аватара пользователя
WolfTheGrey
Потрогал лапой паяльник
Сообщения: 370
Зарегистрирован: Вс май 06, 2012 09:58:33
Откуда: Магадан

Re: помогите с VERILOG

Сообщение WolfTheGrey »

Ошибка (265013): Не удается открыть логический анализатор SignalTap II. Убедитесь, что файл лицензии существует и хранится в нужном месте. Если вы используете программное обеспечение Web Edition Quartus II, необходимо включить функцию TalkBack использовать логический анализатор SignalTap II.
переведен текст на Руссский язык.
Спасибо, включил. И сразу все заработало. Оказывается мне надо было все бинарные числа перевести в десятичные. Завтра попробую будильник с зумером прикошачить. Тоесть он уже прикручен, только из за алгоритма будильника перестает работать алгоритм переноса десятичных чисел на следующий сегмент самих часов. :)))
Спойлер

Код: Выделить всё

// будильник
	  reg[3:0] bmin;     //минуты
	  reg[3:0] bdmin;   //десятые минуты
	  reg[3:0] bxors;    //часы
	  reg[3:0] bdxors;  //десятые часов
	  reg gip; 	  //звонок
	  reg test;
	  
	  initial begin 
		  min = 0; dmin = 0; 
		  xors = 0; dxors = 0; 
		  end
assign test_clock =(test)? 1 : 0;
		  
always @(posedge clk_1k)
 begin 
    if((bmin == min)&(bdmin == dmin)&(bxors == xors)&(bdxors == dxors))
	   begin 
		 //LCD_massiv[24] = 1;
	    if(gip == 0)
		   begin gip = 1; test <= 1; end 
		 else
		   begin gip = 0; test <= 0; end 
		end 
	 //else 
		 //LCD_massiv[24] = 0;  
  end 
Пока просто ночь погоняю на точность. Разница с комом всего 2 секунды.
Аватара пользователя
WolfTheGrey
Потрогал лапой паяльник
Сообщения: 370
Зарегистрирован: Вс май 06, 2012 09:58:33
Откуда: Магадан

Re: помогите с VERILOG

Сообщение WolfTheGrey »

Накатал вот такую строчку: , где clock_alarm1 и clock_alarm2 это живые контакты плиса. Как думаете они выгорят, если на них подцепить Пьезозвонок типо ЗП-19?

Код: Выделить всё

 assign clock_alarm1 =(!gip)? 0 : clk_1k;
 assign clock_alarm2 = (!gip)? 0 : ~clock_alarm1;
ketrosi
Открыл глаза
Сообщения: 61
Зарегистрирован: Чт июл 05, 2012 09:40:46

Re: помогите с VERILOG

Сообщение ketrosi »

о ПЛИС можно спросить здесь - http://marsohod.org/index.php
MisterDi
Встал на лапы
Сообщения: 85
Зарегистрирован: Сб мар 13, 2010 13:52:10

Re: помогите с VERILOG

Сообщение MisterDi »

Как думаете они выгорят, если на них подцепить Пьезозвонок типо ЗП-19?
Выгореть не должны, но многие пьезозвонки громко работают только на своей резонансной частоте, а иначе их почти не слышно. Нагрузочная способность вывода ПЛИС не менее 1 ТТЛ, т.е 5-7 мА отдать можно.
misterdi<@>i.ua
Аватара пользователя
WolfTheGrey
Потрогал лапой паяльник
Сообщения: 370
Зарегистрирован: Вс май 06, 2012 09:58:33
Откуда: Магадан

Re: помогите с VERILOG

Сообщение WolfTheGrey »

Доброй ночи, эт снова я.\
Подскажите как правильно потключить в схемотехнике пины от тригера 74_174 к массиву? То меня послали долеко и без возвратно: Error (275044): Port "pins[6..0]" of type LRdecoder of instance "inst" is missing source signal


Изображение
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: помогите с VERILOG

Сообщение Kavka »

Вам надо от шины сделать отводы сигналов от pins[0] до pins[6] и их уже подключать дальше.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
WolfTheGrey
Потрогал лапой паяльник
Сообщения: 370
Зарегистрирован: Вс май 06, 2012 09:58:33
Откуда: Магадан

Re: помогите с VERILOG

Сообщение WolfTheGrey »

А как от шины сделать отводы?

Так?

Код: Выделить всё

module LRdecoder 
(
	input pin1,
	input pin2,
	input pin3,
	input pin4,
	input pin5,
	input pin6,
	
	output in2,
	output in4,
	
	output p44_1,
	output p48,
	output p88_2,
	output p96,
	output p176_4,
	output p192
);
wire [6:0] pins;
assign pins = {pin6, pin5, pin4, pin3, pin2, pin1};     <-  Я правильно написал эту срочку ???  Или их надо наоборот?
Аватара пользователя
wss60
Потрогал лапой паяльник
Сообщения: 350
Зарегистрирован: Пт сен 10, 2010 20:48:01
Откуда: Минск

Re: помогите с VERILOG

Сообщение wss60 »

Правой кнопкой мыши по шине, выбираем Properties и задаем имя…
h1yuayokk.JPG
(109.57 КБ) 728 скачиваний
Ответить

Вернуться в «ПЛИС»