User Tag List

Страница 160 из 191 ПерваяПервая ... 156157158159160161162163164 ... ПоследняяПоследняя
Показано с 1,591 по 1,600 из 1910

Тема: ПЛИС и всё что с ними связано

  1. #1591
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от dosikus Посмотреть сообщение

    pix_count - cчетчик вверх с параллельной загрузкой, со сбросом при значении 1056-1 - длина всей строки с со всеми причиндалами.
    Это не синхронный дизайн здорового человека. У тебя MUX21 и так делает нормальное синхронное обнуление на шаге h4F1 = 1055. Так зачем этот асинхронный сброс?

    - - - Добавлено - - -

    И еще, ты старайся указывать размерность жгута. Ато он у тебя расширяется до стандартных 32 бит. Понятно, что фиттер потом урежет до используемого количества, но чётко указанная размерность делает схему в RTL чище.

  2. #1591
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #1592

    Регистрация
    29.03.2005
    Адрес
    Ярославль
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Это не синхронный дизайн здорового человека. У тебя MUX21 и так делает нормальное синхронное обнуление на шаге h4F1 = 1055. Так зачем этот асинхронный сброс?

    Наверняка он здесь :
    always @( posedge clk_in or negedge reset )
    begin
    if (!reset) begin
    line_count <= 0; // On a reset, restart counters from 0
    pix_count <= 0;
    v_addr <=0;
    end else begin

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    И еще, ты старайся указывать размерность жгута. Ато он у тебя расширяется до стандартных 32 бит. Понятно, что фиттер потом урежет до используемого количества, но чётко указанная размерность делает схему в RTL чище.
    А это скорей всего я внес здесь :

    localparam integer H_ACTIV = 800;
    localparam integer V_ACTIV = 600;

    Ибо рассчитывал адресc vram - H_ACTIV*V_ACTIV, синтез мне обрезал результат до 16бит.
    Потом расчет переделал на v_addr <= ((pix_y*800)+pix_x);
    и про то забыл..
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  4. #1593
    HardWareMan
    Гость

    По умолчанию

    Цитата Сообщение от dosikus Посмотреть сообщение
    Наверняка он здесь :
    always @( posedge clk_in or negedge reset )
    begin
    if (!reset) begin
    line_count <= 0; // On a reset, restart counters from 0
    pix_count <= 0;
    v_addr <=0;
    end else begin
    А, ну да. Для полностью синхронного дизайна никогда не используй список чувствительности более одного сигнала. Для этого тебе следует сделать вот так:
    Код:
    reg [1:0]SynRes;
    always @( posedge clk_in )
    begin
       // Синхронизация сброса
       SynRes[1:0] <= {SynRes[0],reset};
       if (SynRes[1] & ~SynRes[0]) begin // Либо так: if (SynRes[1:0] == 2'b10) begin
          line_count <= 0;           // On a reset, restart counters from 0
          pix_count <= 0;
          v_addr <=0;
       end else begin
    2 бита это если нужно отловить конкретно перепад, здесь я отлавливаю 1 => 0. Если перепад не нужно (сработка по уровню), то достаточно одного бита, главное это засинхронизировать его (перенести в текущий тактовый домен). В идеале, список чувствительности блока always должен содержать только тактовый сигнал, причем либо posedge, либо negedge. И не обязательно мастерклока. Т.е., если ведомый блок always у тебя не имеет перекликания с другими always блоками, то его тактовая может быть выходом триггера предыдущего блока. Но это уже с опытом придёт.

    И ещё, обязательно усвой разницу инверсии между ~ и !. Она принципиально разная.
    Последний раз редактировалось HardWareMan; 24.09.2019 в 11:36.

    Этот пользователь поблагодарил HardWareMan за это полезное сообщение:

    dosikus(24.09.2019)

  5. #1594

    Регистрация
    29.03.2005
    Адрес
    Ярославль
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Стало :

    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  6. #1595
    HardWareMan
    Гость

    По умолчанию

    Ай, красиво. А что сказал time_quest? Какой получился fmax?

  7. #1596

    Регистрация
    29.03.2005
    Адрес
    Ярославль
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Угу, еще бы я им пользоваться умел ...
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  8. #1597

    Регистрация
    13.02.2016
    Адрес
    г. Королёв
    Сообщений
    493
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от dosikus Посмотреть сообщение
    А это скорей всего я внес здесь :

    localparam integer H_ACTIV = 800;
    localparam integer V_ACTIV = 600;

    Ибо рассчитывал адресc vram - H_ACTIV*V_ACTIV, синтез мне обрезал результат до 16бит.
    Потом расчет переделал на v_addr <= ((pix_y*800)+pix_x);
    и про то забыл..
    Это автоматом проще рассчитывается:

    Код:
    parameter hcnt_Width = $clog2(LINE_END);			//Ширина горизонтального счётчика, вычисляемое
    parameter hAct_Width = $clog2(H_ACTIV);			//Ширина шины адреса по горизонтали, вычисляемое
    parameter vcnt_Width = $clog2(FRAME_END);			//Ширина вертикального счётчика, вычисляемое
    parameter vAct_Width = $clog2(V_ACTIV);			//Ширина шины адреса по вертикали, вычисляемое
    parameter VRAM_Width = vAct_Width + hAct_Width;	//Ширина шины адреса памяти, вычисляемое
    
    reg pix_count [hcnt_Width-1:0] = 0; // Горизонтальный счетчик
    reg line_count [vcnt_Width-1:0] = 0; // Вертикальный счетчик
    
    wire [VRAM_Width-1: 0] VRAM_Addr = {line_count [vAct_Width-1:0], pix_count [hAct_Width-1:0]);
    Когда наводишь мышь в окне проект манагера на какой-либо модуль, в тултипе Квартус показывает значения parameter.
    localparam не показывает(((
    Последний раз редактировалось omercury; 24.09.2019 в 14:46.

    Эти 2 пользователя(ей) поблагодарили omercury за это полезное сообщение:

    dosikus(25.09.2019)

  9. #1598

    Регистрация
    13.02.2016
    Адрес
    г. Королёв
    Сообщений
    493
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    11 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от dosikus Посмотреть сообщение
    Угу, еще бы я им пользоваться умел ...
    В простейшем случае ничего особо и не надо.
    В Compilation Report в окне Table of content найди в дереве TimeQuest Timing Analiser и выбери в нём медленные модели.
    Что-то он там по-любому наанализировал...
    Нажмите на изображение для увеличения. 

Название:	CR.jpg 
Просмотров:	307 
Размер:	22.2 Кб 
ID:	70073
    Последний раз редактировалось omercury; 24.09.2019 в 20:45.

    Этот пользователь поблагодарил omercury за это полезное сообщение:

    dosikus(25.09.2019)

  10. #1599

    Регистрация
    29.03.2005
    Адрес
    Ярославль
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Олег, ок порядок наведем, счас затык в другом - ранее как и писал - может сделаем знакогенератор ?
    ZXM-Phoenix 1024+PROF ROM+SMUC+VGA
    Profi 1024+CF+CPM+VGA
    ATARI 800XL+SIO2PC+SIO2SD
    RK86@Maximite

  11. #1600
    HardWareMan
    Гость

    По умолчанию

    omercury, нужно только SDC файл создать, со требуемой частотой.

    dosikus, вот у тебя pix_count только либо обнуляется, либо считает в плюс, верно?

    А ты вынеси его за скобки, типа вот так:
    Код:
    reg [1:0]SynRes;
    always @( posedge clk_in )
    begin
       // Синхронизация сброса
       SynRes[1:0] <= {SynRes[0],reset};
       // Счетчик пикселей
       if ( (SynRes[1] & ~SynRes[0]) | (pix_count == h41F) ) pix_count <= 0; else pix_count <= pix_count + 1;
       // Остальная логика
       if (SynRes[1] & ~SynRes[0]) begin // Либо так: if (SynRes[1:0] == 2'b10) begin
          line_count <= 0;           // On a reset, restart counters from 0
          v_addr <=0;
       end else begin
    И посмотри, какая красота появится в твоём RTL (только поправь настоящие константы и размерности, я там просто что-бы понятно было написал). Суть посыла такая: синтезатор, к сожалению, не умеет объединять некоторые события сам, справедливо полагая, что они имеют некоторый приоритет, описанный программистом. Однако, схемотехник сразу скажет - тут и тут лишнее, можно упростить. И если ты знаешь что и как - это не сложно объяснить синтезатору. Основная цель - сократить число управляющих цепей. В данном случае цепь сброса счётчика pix_count может быть объединена с цепью обнуления при счёте. Желательно всегда стремиться к уменьшению вложенности управляющих цепей (это те, которые условия), а так же стараться объединять цепи, ведущие к одному результату.

    А в целом, тут ситуация как с блок-схемами алгоритма при обычном программировании - все настойчиво игнорируют этот момент, а потом получают спагетти-код. А ведь описать код по блок-схеме реально быстро и просто, я пробовал. Правда, в институте, когда на кафедре АСУ учился.
    Последний раз редактировалось HardWareMan; 25.09.2019 в 06:48.

    Этот пользователь поблагодарил HardWareMan за это полезное сообщение:

    dosikus(25.09.2019)

Страница 160 из 191 ПерваяПервая ... 156157158159160161162163164 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)

Похожие темы

  1. ДВК (и всё, что с ними связано)
    от Grand в разделе ДВК, УКНЦ
    Ответов: 4575
    Последнее: 17.11.2025, 11:38
  2. PAL/GAL и все что с ними связано.
    от Mick в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 489
    Последнее: 19.09.2025, 18:39
  3. SMUC на дискретах и ПЛИС
    от spensor в разделе Scorpion
    Ответов: 846
    Последнее: 02.05.2025, 08:36
  4. Ответов: 1215
    Последнее: 10.02.2025, 19:04
  5. Вопрос по ПЛИС
    от Zloy в разделе Несортированное железо
    Ответов: 23
    Последнее: 17.10.2015, 17:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •