Jump to content

    
Sign in to follow this  
SergeyVas

port map как сделать в case

Recommended Posts

Не хочется перечислять все подряд

when "0000001"=> x<=a;

when "0000010"=> x<=a;

....

у вас нет выбора, это VHDL. переходите на верилог/систем верилог.

Share this post


Link to post
Share on other sites

понятно.

Еще вопрос как во что синтезируется этот код

tempdataadc1(0)<=datain_adc1 after 500 ns;

Интересует after 500 ns; как синтезатор узнает какой клок, не где не задавал?

И что он сделает одновибратор ?

Share this post


Link to post
Share on other sites
понятно.

Еще вопрос как во что синтезируется этот код

tempdataadc1(0)<=datain_adc1 after 500 ns;

Интересует after 500 ns; как синтезатор узнает какой клок, не где не задавал?

И что он сделает одновибратор ?

Синтезатор для FPGA не сделает одновибратор, ввиду их отсутствия в железе. Вообще задержки не следует указывать в синтезируемом коде.

Сдвиговый регистр можно описывать так:

tempdataadc1 <= tempdataadc1(tempdataadc1'high-1 downto 0) & datain_adc1;

Для описания множественного выбора в VHDL есть оператор "|", причём компилятор Вам про него даже напомнил:). Поставьте Aldec HDL, в справке там полно примеров.

 

Share this post


Link to post
Share on other sites
tempdataadc1 <= tempdataadc1(tempdataadc1'high-1 downto 0) & datain_adc1;

Понятно .

tempdataadc1 <= tempdataadc1(tempdataadc1'high-1 downto 0) & datain_adc1;

tempdataadc1 это векторный тип,

а datain_adc1 stdlogic

Сдвиг на сколько в этом коде будет , так понимаю здесь все время будет "И" с 0 битом tempdataadc1 ?

Share this post


Link to post
Share on other sites
Не хочется перечислять все подряд

when "0000001"=> x<=a;

when "0000010"=> x<=a;

....

 

Тоже ошибка пробовал

Error (10500): VHDL syntax error at proba.vhd(118) near text "B"0000010""; expecting "!", or "=>"

 

Это не "!", а "|" (pipe, вертикальная черта, etc).

when "0000001" | "0000010"=> x<=a;

Share this post


Link to post
Share on other sites
tempdataadc1 <= tempdataadc1(tempdataadc1'high-1 downto 0) & datain_adc1;

tempdataadc1 это векторный тип,

а datain_adc1 stdlogic

Сдвиг на сколько в этом коде будет , так понимаю здесь все время будет "И" с 0 битом tempdataadc1 ?

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

Share this post


Link to post
Share on other sites
спасибо, понял, думал код как в си работает.

 

На время изучения HDL, ИМХО, надо бы подзабыть про языки программирования, да вспомнить цифровую схемотехнику.

Изучать VHDL я начинал с Бибило Основы языка VHDL.

 

 

Share this post


Link to post
Share on other sites

В чем будет разница между entity work и component adc , какой вариант где обычно используется?

 

DD3: entity work.adc(adc_conv)port map(
data1,data2);

и

component adc
    port(
         data1 : in std_logic_vector ( 11 downto ),   
        data2 : out std_logic_vector ( 11 downto ),);
  end component;
begin 
dd3:adc
port map....

Share this post


Link to post
Share on other sites
у вас нет выбора, это VHDL. переходите на верилог/систем верилог.

выбор есть :)

 

пример

when others=>op<=inp(7);

 

в этой строке мы определяем все остальные состояния, которые не хотим перечислять

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.

Sign in to follow this