User Tag List

Показано с 1 по 10 из 24

Тема: VHDL process, обьясните как работает

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от IanPo Посмотреть сообщение
    Про триггер с асинхронным сбросом:
    https://www.kit-e.ru/articles/circuit/2009_1_96.php
    Такая конструкция вполне себе синтезируема.
    ОПА! вот это да... что verilog каким-то образом поддерживает процесс С ДВУМЯ КЛОКАМИ???
    Код:
    module async_resetFFstyle2 (rst_n, clk, asyncrst_n);
      output rst_n;
      input clk, asyncrst_n;
      reg rst_n, rff1;
    
      always @(posedge clk or negedge asyncrst_n)
      if (!asyncrst_n) {rst_n,rff1} <= 2'b0;
      else {rst_n,rff1} <= {rff1,1'b1};
    endmodule
    это ж по идее не соответствует приведенному vhdl эквиваленту:
    Код:
    library ieee;
    use ieee.std_logic_1164.all;
    entity asyncresetFFstyle is
    port (
    	clk : in std_logic;
    	asyncrst_n : in std_logic;
    	rst_n : out std_logic);
    end asyncresetFFstyle;
    architecture rtl of asyncresetFFstyle is
    signal rff1 : std_logic;
    begin
    	process (clk, asyncrst_n)
    	begin
    		if (asyncrst_n = '0') then
    			rff1 <= '0';
    			rst_n <= '0';
    		elsif (clk'event and clk = '1') then
    			rff1 <= '1';
    			rst_n <= rff1;
    		end if;
    	end process;
    end rtl;
    - - - Добавлено - - -

    Цитата Сообщение от svofski Посмотреть сообщение
    Посмотрите на реверснутые процессоры от Vslav, там как раз это видно. Поскольку это реальное железо, комбинаторика и регистры четко разделены. Люди так редко пишут.
    а можно сюда скинуть кусок текста оттуда, ато тяжело мне понять как "люди редко пишут" и почему...

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

    Цитата Сообщение от svofski Посмотреть сообщение
    Это защелка, асинхронный элемент и как правило большой ататат в fpga.
    У меня как бы дизайн под CPLD altera epm3064. Но интересно само это утверждение, которое для меня концептуально значит что ВСЕГДА надо как минимум 1 pin тратить на INPUT для какого-то CLOCK-a... что правда чтоли? неужели вообще не будет работать "по старинке" как оно на 556рт1 например работает (без clock-a вообще)
    Последний раз редактировалось bigral; 01.10.2019 в 18:20.

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

  3. #2

    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    932
    Спасибо Благодарностей отдано 
    246
    Спасибо Благодарностей получено 
    169
    Поблагодарили
    82 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    bigral, будет и без клока работать. Тут речь о том, что асинхронные триггеры сами по себе генераторы проблем Если в схеме на обычной логике эти баги можно пофиксить навешиванием кондерчиков туда-сюда, то в CPLD с этим сложно, и лучше изначально от этого пути отказаться.

  4. #3

    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Xrust Посмотреть сообщение
    bigral, будет и без клока работать. Тут речь о том, что асинхронные триггеры сами по себе генераторы проблем Если в схеме на обычной логике эти баги можно пофиксить навешиванием кондерчиков туда-сюда, то в CPLD с этим сложно, и лучше изначально от этого пути отказаться.
    Концепцию "асинхронные триггеры сами по себе генераторы проблем" не понял. Из всего изложенного в той ссылке про сброс, я вижу такие ключевые моменты:

    1. реальные FPGA очень быстрые по сравнению с логикой sn74xxx, изза этого очень короткая "иголка" 1...4нс длинной может вызвать срабатывание в то время как в обычной схеме на sn74xxx все работает нормально так как не хватает скорости реакции у микрух (ну и такое было у того же Vslav когда он подключал КР1801ВМ1 к плате ALTERA DE1, там были фантомные глюки, изза этих "коротких иголок", решилось все навешиванием кондеров на линии управляющей шины).
    2. для надежного сброса всех внутренних триггеров во внутренней схеме fpga предлагается завести CLOCK сигнал и как токо снаружи появляется сигнал reset_n из него сформировать "внутренний сигнал сброса reset_int_n" который "продержится" еще 1... или больше тиков этого CLOCK... считается что так все внутренние триггеры гарантированно сбросятся и будут в одном и том же состоянии на следующем после "reset_int_n" тике этого самого CLOCK. (но для моего случая, видимо это смысла не имеет, у меня 1 триггер и нету CLOCK-a).

  5. #4

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

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    ОПА! вот это да... что verilog каким-то образом поддерживает процесс С ДВУМЯ КЛОКАМИ???
    Это список чувствительности. Означает, что что-то произойдёт по указанному в скобках событию. Также, как и в VHDL, только чуть точнее в данном написании.
    Чтоб совсем одинаково было, надо posedge/negedge убрать, тогда станут доступны оба перепада.
    И да, always @ вовсе не гарантирует триггеров в цикле, например такая запись:
    Код:
    reg q;
    always @(posedge clock) begin
        q = a & b;
    end
    создаст честную комбинаторику.


    Цитата Сообщение от bigral Посмотреть сообщение
    это ж по идее не соответствует приведенному vhdl эквиваленту:
    Вообще один-в-один.

    Кстати, вместо clk'event and clk = '1' можно писать rising edge clk.

  6. #5

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,309
    Спасибо Благодарностей отдано 
    1,034
    Спасибо Благодарностей получено 
    819
    Поблагодарили
    490 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от omercury Посмотреть сообщение
    И да, always @ вовсе не гарантирует триггеров в цикле, например такая запись:
    Код:
    reg q;
    always @(posedge clock) begin
    q = a & b;
    end
    создаст честную комбинаторику.
    Это в каком смысле "честную комбинаторику"? Нетрудно проверить:

    Скрытый текст


    (это можно скопипастить в https://www.tutorialspoint.com/compi...log_online.php)
    Код:
    /* 
     * Do not change Module name 
    */
    module main;
      reg clk=0;
      reg fastclk=0;
    
      always #5 clk <= ~clk;
      always #1 fastclk <= ~fastclk;
    
      initial 
        begin
          $display("Hello, World");
          #20 $finish;
        end
    
    
      wire q_clocked;
      wire q_unclocked;
      
      reg [1:0] count = 0;
      always #2 count <= count + 1;
      wire a = count[0], b = count[1];
    
      always @(posedge fastclk) 
        $display("clk=", clk, " a=", a, " b=",b, 
            " q_clocked=", q_clocked, " q_unclocked=", q_unclocked);
    
      clocked boo1(clk, a, b, q_clocked);
      unclocked boo2(a, b, q_unclocked);
        
    endmodule
    
    module clocked(input clock, input a, input b, output reg q);
       always @(posedge clock) begin
            q <= a & b;
       end
    endmodule
    
    module unclocked(input a, input b, output reg q);
        always @* begin
            q <= a & b;
        end
    endmodule
    [свернуть]
    Больше игр нет

  7. #6

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    Это в каком смысле "честную комбинаторику"? Нетрудно проверить:

    Скрытый текст


    (это можно скопипастить в https://www.tutorialspoint.com/compi...log_online.php)
    Код:
    /* 
     * Do not change Module name 
    */
    module main;
      reg clk=0;
      reg fastclk=0;
    
      always #5 clk <= ~clk;
      always #1 fastclk <= ~fastclk;
    
      initial 
        begin
          $display("Hello, World");
          #20 $finish;
        end
    
    
      wire q_clocked;
      wire q_unclocked;
      
      reg [1:0] count = 0;
      always #2 count <= count + 1;
      wire a = count[0], b = count[1];
    
      always @(posedge fastclk) 
        $display("clk=", clk, " a=", a, " b=",b, 
            " q_clocked=", q_clocked, " q_unclocked=", q_unclocked);
    
      clocked boo1(clk, a, b, q_clocked);
      unclocked boo2(a, b, q_unclocked);
        
    endmodule
    
    module clocked(input clock, input a, input b, output reg q);
       always @(posedge clock) begin
            q <= a & b;
       end
    endmodule
    
    module unclocked(input a, input b, output reg q);
        always @* begin
            q <= a & b;
        end
    endmodule
    [свернуть]
    Пример действительно поганенький.


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

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

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

Похожие темы

  1. Как работает графика?
    от SaintTurnip в разделе Корвет
    Ответов: 2
    Последнее: 23.02.2018, 09:00
  2. Ответов: 8
    Последнее: 19.10.2017, 15:08
  3. Как работает /RESET?
    от Gutten в разделе Несортированное железо
    Ответов: 5
    Последнее: 28.03.2014, 11:58
  4. как работает огибающая?
    от jerri в разделе Музыка
    Ответов: 6
    Последнее: 28.02.2014, 00:59
  5. Как в VHDL смешать бипер с PWM (AY и Covox)?
    от ILoveSpeccy в разделе Звук
    Ответов: 14
    Последнее: 21.04.2009, 18:03

Ваши права

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