Jump to content
    

Реализация простой операции (Verilog)

Подскажите, пожалуйста, как реализовать в Verilog'95 нижеприведенную схему? post-57771-1317747271_thumb.jpg

Да вот прям через assign. Верхний кусок:

assign q = ShR0 & ShR1 & ShR2 & Shr3; ну и т.д.

Share this post


Link to post
Share on other sites

Да вот прям через assign. Верхний кусок:

assign q = ShR0 & ShR1 & ShR2 & Shr3; ну и т.д.

 

 

Выписывать в несколько цепочек по пару сотен имен в каждую?

Никакой цикл или хитрую операцию применить нельзя?

Share this post


Link to post
Share on other sites

Выписывать в несколько цепочек по пару сотен имен в каждую?

Никакой цикл или хитрую операцию применить нельзя?

Вы хотя бы стандарт посмотрели? Или хотите чтоб за Вас все сделали? Я б через for сделал как-то так:

always @(*)
    for(i=0;i<32;i=i+1) q [i]= ShR[4*i] & ShR[4*i+1] & ShR[4*i+2] & Shr[4*i+3];

Share this post


Link to post
Share on other sites

for(i=0;i<32;i=i+1) q = ShR[4*i] & ShR[4*i+1] & ShR[4*i+2] & Shr[4*i+3] - компилятор на это выражение выдает ошибку: выражение в скобках [] должно быть константой

Share this post


Link to post
Share on other sites

for(i=0;i<32;i=i+1) q = ShR[4*i] & ShR[4*i+1] & ShR[4*i+2] & Shr[4*i+3] - компилятор на это выражение выдает ошибку: выражение в скобках [] должно быть константой

А ведь знаете что, я ведь не поленился проверить и загнал в квартус на verilog'95

module test_pin_project
(
input [127:0] ShR,
output reg [31:0] q
);
integer i;
always @(*) for(i=0;i<32;i=i+1) q [i]= ShR[4*i] & ShR[4*i+1] & ShR[4*i+2] & ShR[4*i+3];
endmodule

Получил на rtl wiever то, что и хотел увидеть...

Share this post


Link to post
Share on other sites

always @(*)

Там по умолчанию 2001

 

Подскажите, пожалуйста, как реализовать в Verilog'95 нижеприведенную схему?

 

Выделить сущность в виде функции и размножить.

А чтоб на 95 - садисты там у Вас

module fun_shr ////2001
(
input [127:0] shr,
output [15:0] bit_out,
output          en_out
);


reg [15:0] f;
reg [15:0] en;

function [1:0] y (input [7:0] x);
begin
y[0] = ( (&x[3:0]) && (!(|x[7:4])) ) || ( (&x[7:4]) && (!(|x[3:0])) );
y[1] = ( (&x[3:0]) && (!(|x[7:4])) ) && ( !( (&x[7:4]) && (!(|x[3:0])) ) );
end
endfunction


always @(*)
begin: block
integer i;
for (i=0; i<=15; i=i+1) 
{f[i], en[i]} = y(shr[8*i +:8]);
end

assign bit_out = f,
          en_out = &en;

endmodule

Share this post


Link to post
Share on other sites

как на верилоге описать регистр, который на AHDL выглядит как

Registr[2..0][7..0]           : dffe;

???????????

Share this post


Link to post
Share on other sites

Там по умолчанию 2001

Так я по умолчанию в verilog version на verilog-1995 поменял в analysis & synthesis settings. Стандарта именно на 95 под рукой нет, но сомневаюсь, чтобы квартус проигнорировал настройки.

to stu

Может быть:

reg [2:0] Registr[0:7];

8 регистров разрядности 3. Ну и описать его правильно в блоке always при работе, чтоб реализован был именно на требуемых триггерах.

PS/ Я в AHDL не силен, но логика вроде просматривается.

Share this post


Link to post
Share on other sites

под регистором имел ввиду D-триггер. : dffe;

можно конечно 3 семирязрядных триггера описать, но надо как Registr[2..0][7..0] : dffe;

Edited by stu

Share this post


Link to post
Share on other sites

как на верилоге описать регистр, который на AHDL выглядит как
Registr[2..0][7..0]           : dffe;

logic [7:0] Register [2:0]

3 регистра разрядности 8. Не так?

Share this post


Link to post
Share on other sites

Так я по умолчанию в verilog version на verilog-1995 поменял в analysis & synthesis settings.

 

Получается - игнорирует.

Ибо это тоже 2001

module test_pin_project
(
input [127:0] ShR,
output reg [31:0] q
);

 

Share this post


Link to post
Share on other sites

Получается - игнорирует.

Верю на слово, перед AlexBT_ извиняюсь за неверную наводку...

to stu

Что Вы имеете ввиду под

можно конечно 3 семирязрядных триггера описать, но надо как Registr[2..0][7..0] : dffe;

Триггер как-бы по определению выдает только один разряд. Я так понял Вам нужен массив элементов 3X8 или 8X3, реализованный на D триггерах? Если да, то варианты выше подходят.

Share this post


Link to post
Share on other sites

Триггер как-бы по определению выдает только один разряд. Я так понял Вам нужен массив элементов 3X8 или 8X3, реализованный на D триггерах? Если да, то варианты выше подходят.

весело. особенно это 586294dc8b67.jpg

Edited by stu

Share this post


Link to post
Share on other sites

весело. особенно это

А что Вас смущает, это просто RTL представление. Показан один 8 разрядный регистр на триггерах, Вы глубже копните, например в technology Map Viewer. Посмотрите сколько там триггеров.

Share this post


Link to post
Share on other sites

А что Вас смущает, это просто RTL представление. Показан один 8 разрядный регистр на триггерах,

Да и эти можно разгруппировать, нажать правую кнопку мышки и выбрать в меню.

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.

×
×
  • Create New...