Jump to content

    
Manvel

Максимальная частота тактирования

Recommended Posts

не ради холивара

посоветую автору темы, если он еще не определился, взять язык Verilog (SV) а не VHDL

описание второго (простого) счетчика из ответа Maverick_ будет как-то так 

module cntr(input logic clk, en, rst, output logic [63:0] count);

always @(posedge clk or negedge rst)

if(!rst) count<='0; else if (en) count<=count+64'd1;

endmodule

что, по моему, большой плюс - краткость, то есть меньше шансов ошибиться

Share this post


Link to post
Share on other sites
Just now, andrew_b said:

В VHDL тоже можно писать в одну строку.

сомневаюсь, что символов выйдет мало - станет только хуже с ясностью.

и даже если навставлять переводов строк после ; в верилоге - то все равно - сильно лучше с лаконичностью будет

 

Share this post


Link to post
Share on other sites
21 minutes ago, andrew_b said:

Так индусы херак-херак и в продакшн.

Да, это сильный аргумент, чтобы переписать индусские написать свои IP Cores для 25/50/100G Ethernet'а на VHDL.


А свои IP Cores для PCIe Gen3/Gen4 вы уже на VHDL написали?

 

А как насчет IP Cores для DDR3/DDR4 ? У вас тоже всё своё и на VHDL ?

Share this post


Link to post
Share on other sites
6 minutes ago, andrew_b said:

Не постигаю вашей логики.

Логика простая:

Вы заявили, что индусы пишут кривые IP Cores, но быстро.

Очевидно, эти кривые IP Cores вас не устраивают.

Тогда вам нужно написать свои IP Cores на замену этим "херак-херак" IP Cores.


Так, понятнее?

 

Share this post


Link to post
Share on other sites
12 минут назад, blackfin сказал:

Вы заявили

Вы поднимите глаза на первое сообщение на этой странице. Там нам заявляют, что верилог хорош уж тем, что надо букавок меньше писать. И из-за этого якобы меньше ошибок будет. Я говорю, что это иллюзия.

14 минут назад, blackfin сказал:

индусы пишут кривые IP Cores

То, что энтерпрайздный код местами, мягко говоря, далёк от совершенства, никто, надеюсь, спорить не будет. Что софт (привет Некрософту), что хард (привет Интелу).

Безотносительно индусов и кривизны корок, Верилог просто провоцирует на написание такого говнокода, который на VHDL в принципе невозможен. Аргументы против Верилога я уже тут приводил, повторяться неохота. Нравится стрелять себе по ногам из гранотомёта -- ну удачи.

Share this post


Link to post
Share on other sites
14 minutes ago, andrew_b said:

Вы поднимите глаза на первое сообщение на этой странице. Там нам заявляют, что верилог хорош уж тем, что надо букавок меньше писать. И из-за этого якобы меньше ошибок будет. Я говорю, что это иллюзия.

Я с этим и не спорил. Я лишь подчеркнул, что длина кода это не единственный аргумент в споре.

Суровая реальность состоит в том, что если хочется использовать готовые IP Cores от вендора, то вам никуда не уйти от изучения Verilog'а.

Ибо готовые тестбенчи, примеры готовых проектов с этими IP Cores и все мануалы на эти IP Cores, всё это Xilinx дает на языке Verilog.

А написать криво и быстро можно на любом языке. Даже здесь, на форуме, многие не могут написать без ошибок и двух слов на языке, на котором пишут и говорят уже практически всю жизнь. ))

Share this post


Link to post
Share on other sites

Все мы читаем как verilog так и  vhdl

Кому то удобнее писать на verilog  или на vhdl и как говориться на вкус и цвет товарищей нет.

Все работают как им удобно и пишут на языках которые выбрали для себя.

Мне удобнее писать на vhdl потому что мне нравиться строгая типизация и на уровне проверки ошибок убираются многие опечатки (например я не смогу соеденить шины разной разрядности).

Не для спора...

13 hours ago, blackfin said:

Да, это сильный аргумент, чтобы переписать индусские написать свои IP Cores для 25/50/100G Ethernet'а на VHDL.


А свои IP Cores для PCIe Gen3/Gen4 вы уже на VHDL написали?

 

А как насчет IP Cores для DDR3/DDR4 ? У вас тоже всё своё и на VHDL ?

Вы работали с 10g от интел/альтера?

Share this post


Link to post
Share on other sites
1 minute ago, blackfin said:

Нет, с 10G от Интела не работал. Но читал манулы Альтеры на их IP Core для 10G.

Жаль ... У меня просто одна корка работает супер. Добавляю вторую корку (копия первой)  которая работает паралельно с первой то вторая переодически теряет линк.

Почему не могу понять....

Share this post


Link to post
Share on other sites
01.07.2021 в 00:37, Maverick_ сказал:

спорно (выделил жирным) это особенно если брать обработку данных в 32 бита и выше... :) и делать описание схемы с помощью языка HDL. Стараться не использовать готовые IP core производителя для обеспечения переносимости код

Приведу пример на основе 64 битного счетчика

Так сказать "Новороченный" счетчик:


library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity PipelinedCounter is
    generic (
        width_g: natural := 64; -- Must be divisible by parts_g.
        parts_g: natural := 4
    );
    
    port (
        clk:            in std_logic;
        rst:          in std_logic;
        
        clear:          in std_logic;
        enable:         in std_logic;
        
        count:          out std_logic_vector(width_g - 1 downto 0);
        tick:           out std_logic
    );
end entity;

architecture rtl of PipelinedCounter is
    constant part_width_c:      natural := width_g / parts_g;
    signal almost_tick_r:       std_logic_vector(parts_g - 1 downto 0);
    signal count_r:             std_logic_vector(width_g - 1 downto 0);
begin
    count <= count_r;

    process (all)
        variable part_v:        unsigned(part_width_c - 1 downto 0);
        variable tick_v:        std_logic;
    begin
        if rst = '1' then
            count_r <= (others => '0');
            almost_tick_r <= (others => '0');
            tick <= '0';
        elsif rising_edge(clk) then
            
            tick_v := enable;
            for i in 0 to parts_g - 1 loop
                part_v := unsigned(count_r((i + 1) * part_width_c - 1 downto i * part_width_c));
                
                if tick_v = '1' then
                    -- Value is max - 1?
                    if part_v = to_unsigned(2**part_width_c - 2, part_width_c) then
                        almost_tick_r(i) <= '1';
                    else
                        almost_tick_r(i) <= '0';
                    end if;
                
                    part_v := part_v + 1;
                end if;
                
                count_r((i + 1) * part_width_c - 1 downto i * part_width_c) <=
                    std_logic_vector(part_v);
                
                tick_v := tick_v and almost_tick_r(i);
            end loop;
            tick <= tick_v;
            
            if clear = '1' then
                count_r <= (others => '0');
                almost_tick_r <= (others => '0');
                tick <= '0';
            end if;
        end if;
    end process;
end architecture;

и тот же счечик описанный стандартно:


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity PipelinedCounter is
    Port ( clk : in std_logic;
           en : in std_logic;
           rst : in std_logic;
           count : out std_logic_vector(63  downto 0));
end PipelinedCounter;

architecture behavioral of PipelinedCounter is
signal cnt: std_logic_vector (63  downto 0):= (others => '0');
begin 
pr_d_e: process (clk, en, cnt, rst)
begin
if (rst = '0') then
cnt <= (others => '0');
elsif (clk'event and clk = '1') then
if (en = '1') then
cnt <= cnt + "0000000000000000000000000000000000000000000000000000000000000001";
end if;
end if;
count <= cnt;
end process pr_d_e;
end behavioral;

обычный счетчик дает

image.thumb.png.47fbdf022dc694896e9bd266e5191790.png

так сказать "Новороченный" счетчик

image.thumb.png.a7cf790fc5aedf1f4318b09999431057.png

 

PS Не для халивара. Это мое личное мнение/опыт. Все выше мною сказанное касается только если не использовать готовые IP core производителя, а стараться самому описать все вычислительные блоки на HDL, чтобы была переносимость.

 

 

 

1. Это не серьезно. 

2. Вот в таких случаях и нужно знать особенности ПЛИС.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.