Не работает цикл For на верелог

Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить
leonem
Родился
Сообщения: 13
Зарегистрирован: Пт сен 02, 2011 13:42:30
Откуда: г.Москва

Не работает цикл For на верелог

Сообщение leonem »

Хочу заменить

Код: Выделить всё

         assign sr_out = sr[7:0]; 
         assign sr_out1 = sr[15:8];
         assign sr_out2 = sr[23:16];
         assign sr_out3 = sr[31:24];

на assign sr_out = sr[i*8-1:(i-1)*8]; но к сожалению это не получается не понимаю почему

Код: Выделить всё

module counter (
   shift,
    clk,
     sr_in,
        sr_out,
        sr_out1,
        sr_out2,
        sr_out3,
        sr_out4
);
input shift,clk;

input wire [7:0]sr_in;

output  [7:0]sr_out,sr_out1,sr_out2,sr_out3,sr_out4; 
reg  [31:0]sr;
	
always @ (posedge clk)

     if (shift ==1 ) 
 sr <= { sr[23:0],sr_in };
  parameter SIZE = 4;
genvar i;   
generate
for (i=1; i <= SIZE; i=i+1)
begin: bit
   assign sr_out[i] = sr[i*8-1:(i-1)*8];
 
end
endgenerate
Реклама
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Не работает цикл For на верелог

Сообщение Kavka »

leonem писал(а):Хочу заменить

Код: Выделить всё

         assign sr_out = sr[7:0]; 
         assign sr_out1 = sr[15:8];
         assign sr_out2 = sr[23:16];
         assign sr_out3 = sr[31:24];

на assign sr_out = sr[i*8-1:(i-1)*8]; но к сожалению это не получается не понимаю почему

Ох, уже слабо помню те обрывки Verilog-а, что когда-то пытался освоить. Но и без этого видно, что вы пытаетесь подставить "цифирку", мягко говоря не так. Вы подставляете её в имя "вектора" - тут оно так не работает.
Иначе говоря, вам нужен двумерный массив.

Код: Выделить всё

output  [7:0]sr_out,sr_out1,sr_out2,sr_out3,sr_out4; 
Вот это не массив, это отдельные "вектора" по 8 бит.

Могу предположить, что вам надо вот такое определение (не уверен про синтаксис).

Код: Выделить всё

output  [3:0][7:0]sr_out; 
Копайте в этом направлении.

Удачи.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
leonem
Родился
Сообщения: 13
Зарегистрирован: Пт сен 02, 2011 13:42:30
Откуда: г.Москва

Re: Не работает цикл For на верелог

Сообщение leonem »

Всё равно что то не так использование массива ситуацию не улучшает ругается отладчик. Ещё не понятно регистр SR и регистры sr_out это разные регистры или это один переименованный в разные. Ведь тогда SR должен быть определен массивом наверное.
leonem
Родился
Сообщения: 13
Зарегистрирован: Пт сен 02, 2011 13:42:30
Откуда: г.Москва

Re: Не работает цикл For на верелог

Сообщение leonem »

Ковырял я его долго но оказалось должно быть так а ещё не получалось из за не правельного тестбэнча.

Код: Выделить всё

module counter (
    shift,
    clk,
    sr_in,
    sr_out,
    sr_out1,
    sr_out2,
    sr_out3,
    sr_out4
);
input shift,clk;
input wire [7:0]sr_in;
output  [7:0]sr_out,sr_out1,sr_out2,sr_out3,sr_out4;
reg [3:0]counte=4'b0;
reg [7:0] sr [3:0];
  integer n;
reg [7:0]v =8'h57;
reg [7:0]a;
wire c;
always @(posedge clk)
if (shift ==1)
begin
    if(counte==4'd4)    counte <= 4'b0;
    else                counte <= counte + 1'd1;
 
    for (n = 0; n<4; n = n+1)
    begin
        sr[0] <= sr_in;
        sr[n] <=sr[n-1];
        $display("%d",n,sr[n]);
    end
end
assign c = counte == 4'd4;
assign sr_out = sr[0];
assign sr_out1 = sr[1];  
assign sr_out2 = sr[2];
assign sr_out3 = sr[3];

always @ (posedge clk)
if(c==1)
begin
    a <= v+ sr[2];
    $display("%d",n,a);
end
initial
$monitor($stime,, shift,, clk,,,sr_out,sr_out1,a, sr_in );
endmodule
Реклама
Эиком - электронные компоненты и радиодетали
leonem
Родился
Сообщения: 13
Зарегистрирован: Пт сен 02, 2011 13:42:30
Откуда: г.Москва

Re: Не работает цикл For на верелог

Сообщение leonem »

Проблема оказалась даже не в тестбэнче.
Код который я писал становясь не нужным был за коментирован и что то пошло не так.
Написано правильно а не работает. Только когда перенёс и очистил от кометтариев в новый файл всё заработало. Где могла сохраниться проблема в старом тексте.
Реклама
Ответить

Вернуться в «ПЛИС»