Как выполнить расширение бит в системе Verilog?

Я хочу реплицировать один бит в определенное время, используя оператор репликации {}, но я получаю только первый бит, как я хочу, а другие - нули, независимо от того, равен ли бит нулю или единице.

module(logic output [7:0] a);
assign a={8{1}};
endmodule

Я получаю равно 00000001 Не 11111111


person Hussien Mostafa    schedule 01.04.2019    source источник


Ответы (1)


В Verilog литерал без основания (например, 1) является (а) десятичным, (б) знаковым и (в) 32-битным. Из-за (с),

{8{1}}

такой же как

{8{32'sb00000000000000000000000000000001}}

это 256-битное число, которое затем усекается до 8 бит, когда ему присваивается a. Вот почему вы получаете a равным 8'b00000001.

Тебе нужно

{8{1'b1}}
person Matthew Taylor    schedule 01.04.2019
comment
Спасибо . В этом случае он работал нормально, но если вы хотите расширить определенный бит из другого ввода, например a={8anotherInput[5]}; это делает ту неправильную вещь - person Hussien Mostafa; 01.04.2019
comment
а={8{другой ввод[5]}} - person Oldfart; 01.04.2019