Перейти к содержанию
    

"обнуление" сигнала

Потихоньку разбираюсь с ПЛИС. Пишу на VHDL. Допустим имеем сигнал

signal sig std_logic_vector (7 downto 0);

 

и в какой то момент нужно записать во все его разряды нули (обнулить).

Вижу два варианта:

1. sig<=X"00"; -- в этом случае при изменении разрядности сигнала придется изменять и разрядность данных X"00".

-- А что делать есть ли разрядность сигнала не кратна байту?

2. sig<=(other=>0); -- работает, но смущает описание:

 

Ключевое слово others употребляется в нескольких случаях.

1. Имеется возможность использовать слово "others", которое назначает значение всем другим элементам массива, которые не были определены.

signal X : bit_vector (3 downto 0);

signal A, B, C, D : bit;

signal BYTE : bit_vector (7 downto 0);

X <= (3=>’1’, 1=>’O’, others => B);

2. В операторе case.

process (A, В, С, X) begin

case X is

when 0 to 4 => Z <= B;

when 5 => Z <= C;

when 7 | 9 => Z <= A;

when others => Z <= 0;

end case;

end process;

 

Внимание, вопрос! :rolleyes: А как Вы делаете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2. sig<=(other=>0); -- работает, но смущает описание:

А что ту такого? Да, others в разных контекстах имеет разный смысл. Как будто в других языках такого нет.

Я лично использую

sig <= (other => 0);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что ту такого? Да, others в разных контекстах имеет разный смысл. Как будто в других языках такого нет.

Я лично использую

sig <= (other => 0);

Поддерживаю!!! :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что ту такого? Да, others в разных контекстах имеет разный смысл. Как будто в других языках такого нет.

Я лично использую

sig <= (other => 0);

+1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что ту такого? Да, others в разных контекстах имеет разный смысл. Как будто в других языках такого нет.

Я лично использую

sig <= (other => 0);

 

А есть что либо подобное в verilog?

Я вчера это так написал ( передача на выход максимального значения, с сохранением знака):

for (j=0;j<=WIDTH-2;j=j+1)
        begin
        OUT_tmp[j]<=1;
        end
    OUT_tmp[WIDTH-1]<=OUT_zn;    
    end

Изменено пользователем Swup

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А есть что либо подобное в verilog?

Я вчера это так написал ( передача на выход максимального значения, с сохранением знака):

for (j=0;j<=WIDTH-2;j=j+1)
        begin
        OUT_tmp[j]<=1;
        end
    OUT_tmp[WIDTH-1]<=OUT_zn;    
    end

 

В Veriloge можно так:

 

`define WIDTH 8
assign sig = {`WIDTH {1'b0}}; // Все нули
assign OUT_tmp[`WIDTH-1:0] = {OUT_zn, {(`WIDTH-2){1'b1}}};

Изменено пользователем Torpeda

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а если использовать приставку System к слову Verilog, то:

assign sig = '0; // Все нули

 

А в просто Verilog есчё просче:

assign sig = 0; // Все нули

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в просто Verilog есчё просче:

assign sig = 0; // Все нули

ну если глаза на предупреждение синтезатора закрыть то да %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...