Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить

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

Вт сен 30, 2014 08:14:30

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

//уберите 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

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

Ср окт 01, 2014 01:52:16

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:

Изображение

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

Ср окт 01, 2014 08:46:10

В этом и отличие от простого программирования. Тут Вы описываете схему - а не просто алгоритм. Поэтому надо смотреть warning'и и после компиляции желательно зайти в RTL Viewer и посмотреть получившуюся схему.

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

Ср окт 01, 2014 14:41:09

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


Хорошая статья Вы это знали?
Операторы присваивания в Verilog делятся на блочное «=" и внеблочное «<=". Блочное присваивание выполняется сразу, в том месте, где оно встретилось, причем переменная меняет свое значение мгновенно и это может происходить неоднакратно в одной ветви алгоритма. Внеблочное присваивание изменяет значение переменной только в момент выхода из блока.

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

Ср окт 01, 2014 16:29:58

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

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

Ср окт 01, 2014 17:14:26

WolfTheGrey писал(а):И это ни как не отключить?

Вы как раз и отключили,только не то, что надо.Вот это: encoder_binaru -у Вас отсутствует в описании входов и выходов модуля.Это же должны быть входы,правильно?

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

Ср окт 01, 2014 18:34:55

Извините,я неправ.Глупость написал.

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

Чт окт 02, 2014 08:50:49

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

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

Чт окт 02, 2014 12:36:42

А еще в квартусе не работает логический анализатор SignalTap, видишлите отключена функция TalkBack.

SignalTap к TalkBack не имеет никакого отношения.
SignalTap включается галочкой в окне свойств проекта и требует перекомпиляции проекта, а TalkBack включается Tools-Options-Internet Connectivity. TalkBack - служба статистики Альтеры и ни на что не влияет

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

Чт окт 02, 2014 13:21:13

Ошибка (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 секунды.

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

Вс окт 05, 2014 05:48:36

Накатал вот такую строчку: , где clock_alarm1 и clock_alarm2 это живые контакты плиса. Как думаете они выгорят, если на них подцепить Пьезозвонок типо ЗП-19?
Код:
 assign clock_alarm1 =(!gip)? 0 : clk_1k;
 assign clock_alarm2 = (!gip)? 0 : ~clock_alarm1;

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

Вс окт 05, 2014 07:21:26

о ПЛИС можно спросить здесь - http://marsohod.org/index.php

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

Вс окт 05, 2014 15:57:00

Как думаете они выгорят, если на них подцепить Пьезозвонок типо ЗП-19?

Выгореть не должны, но многие пьезозвонки громко работают только на своей резонансной частоте, а иначе их почти не слышно. Нагрузочная способность вывода ПЛИС не менее 1 ТТЛ, т.е 5-7 мА отдать можно.

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

Пт окт 17, 2014 15:07:14

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


Изображение

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

Пт окт 17, 2014 18:01:30

Вам надо от шины сделать отводы сигналов от pins[0] до pins[6] и их уже подключать дальше.

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

Пт окт 17, 2014 21:51:49

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

Так?
Код:
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};     <-  Я правильно написал эту срочку ???  Или их надо наоборот?

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

Сб окт 18, 2014 01:19:31

Правой кнопкой мыши по шине, выбираем Properties и задаем имя…
h1yuayokk.JPG
(109.57 KiB) Скачиваний: 693
Ответить