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

С endmodule все в порядке. Я б как-то так описал:

 

integer j;

always @(posedge clk or posedge rst)
    if(rst) shift_reg[j] <= 0;
        else if (ce) begin for (j=1; j < depth_select_bits-1; j=j+1)
            shift_reg[j] <=  shift_reg[j-1];
            shift_reg[0] <= d_in;
            end

 

PS/ Swup опередил :)

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


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

а под ресетом цикла не надо?

 

hift_reg[j] <= 0; не круто, integer j; оно вообще не имеет значения...

Цикл надо, пропустил. Не имеет значение что?

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


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

с циклом все становиться нормально.

без hift_reg[j] <= 0 - очень плохо, потому что j

объявлено

integer j;

и не имеет значения, ничему не равно

integer j = 0;

так лучше ИМХО

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


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

с циклом все становиться нормально.

без hift_reg[j] <= 0 - очень плохо, потому что j

объявлено

integer j;

и не имеет значения, ничему не равно

integer j = 0;

так лучше ИМХО

Диапазон значений для j задаются в for, смысл задавать ему начальное значение, хотя для наглядности возможно и стоит.

Ps Все, понял о чем Вы писали. Имеется ввиду либо цикл под сбросом, либо оставить кусок как есть, просто задать начальное значение в явном виде для j, что равнозначно

 hift_reg[0] <= 0

.

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


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

та блин, один фиг , все время вижу..такую картинку((((

 

https://pp.vk.me/c625623/v625623687/34067/tM48ChZRg5U.jpg

 

 

timescale 1ns / 1ps

module line(input clk,
input ce,
input rst,
input [15:0] d_in,
output [15:0] d_out
);
integer j;
parameter depth_select_bits = 10;
parameter data_width = 16;

wire [data_width-1:0] data_in, data_out; 
reg [data_width-1:0] shift_reg [depth_select_bits-1:0];

assign d_out = shift_reg[depth_select_bits-1];  //мне кажется вот тут собака зарыта. не вяжет он регистр с выходом
always @(posedge clk or posedge rst)
if(rst)  bigin for (j=0 j < depth_select_bits-1; j=j+1)
shift_reg[j] <= 0;
end
else if (ce) begin for (j=1; j < depth_select_bits-1; j=j+1)
shift_reg[j] <= shift_reg[j-1];
shift_reg[0] <= d_in;
end
endmodule

 

красное на рисунки это все d_out

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

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


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

если у вас регистр равен ничто, то когда вы его передаете другим чему они равны:)?

 

ресет дерните!

в 1 варианта ресета ваще нет, там надо регистры хоть как-то задать... или ждать наполнения со входа

во 2 варианте ресет асинхронный, ему нужен четкий фронт из 0 в 1

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


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

если у вас регистр равен ничто, то когда вы его передаете другим чему они равны:)?

 

ресет дерните!

в 1 варианта ресета ваще нет, там надо регистры хоть как-то задать... или ждать наполнения со входа

во 2 варианте ресет асинхронный, ему нужен четкий фронт из 0 в 1

 

так я дергал или так не пойдет ?

       
//блок формирования Reset
initial begin 
forever begin //бесконечный цикл 
@ (reset_trigger); //ждем события reset_trigger
@ (posedge clk); //ждем clk
rst = 1;
ce =0;
d_in = 16'd00; 
//сброс
@ (posedge clk); 
rst = 0; 
-> reset_done_trigger; //сигналим что reset выполнен
end 
end

//Ход симуляции
initial 
begin: TEST_CASE 
#10 -> reset_trigger; //делаем ресет с задержкой 10
@ (reset_done_trigger); //ждем сигнал reset_done_trigger
@ (posedge clk); 
ce = 1; //разрешаем счет
d_in = 16'd9;


repeat (10) begin //цикл на 5 повторений
@ (posedge clk); //ждем clk
end 
ce= 0; //запрещаем счет
end 
endmodule

 

 

https://psv4.vk.me/c609522/u18277687/docs/6...SNFZB9s9ZemGSc1

 

и вот результат же

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

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


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

У вас ошибки в коде. Он в принципе и компилироваться не должен. Если это код скопированный прямо из среды, то возможно вам стоит обратить на это внимание. (bigin в 18ой строке)

 

Во-вторых соблюдайте форматирование нормальное. Оно ведь отображает вложенность. это позволяет проще ориентироваться.

 

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

Обратите внимание на 23 строку. При том как у вас написано вам нужно перебирать не до N-1, а до N потому что вы начинаете с 1, а не с 0.

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


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

так я дергал или так не пойдет ?

 

у вас переход из непойми чего в 1,

для асинхронного сброса, для симуляции надо переход из 0 в 1 четко...

так что сначала 0 задайте, а потом только 1

 

ну и все что сказано выше%)

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


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

у вас переход из непойми чего в 1,

для асинхронного сброса, для симуляции надо переход из 0 в 1 четко...

так что сначала 0 задайте, а потом только 1

 

ну и все что сказано выше%)

 

 

 

 

ОГРОМНОЕ СПАСИБО ВСЕ ЗАРАБОТАЛО!!!!!

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


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

Можно ли так соединять модули меж собой ?? если да то где меня ошибка. ( идея: в общий модуль соеденить линию задержки и суматор с умножением данных с линии задержки )

module Filter1(
input ce1,clk1,
input [15:0] in1,
output [15:0] f_out
);



line utu (
.clk(clk1), 
.ce(ce1), 
.d_in(in1),
.d_out(in2)

);

sum2 uutu ( 
.clk2(clk1),
.in2(d_out),
.ce2(ce1),
.sum_out(f_out)
);

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


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

ошибка что в такой записи verilog автоматически сделал сигнал

in2 увидев .d_out(in2)

а потом добавил

d_out увидев .in2(d_out),

и совершенно не захотел прослеживать вашу связь названий)%

 

 

module Filter1(
input ce1,clk1,
input [15:0] in1,
output [15:0] f_out
);

wire interconnect_w;

line utu (
.clk(clk1), 
.ce(ce1), 
.d_in(in1),
.d_out(interconnect_w)

);

sum2 uutu ( 
.clk2(clk1),
.in2(interconnect_w),
.ce2(ce1),
.sum_out(f_out)
);

 

но вообще написано весьма мусорно

.clk2(clk1) - вот прям линейкой да по рукам...

 

какого черта в модуле вход clk2 если у него вход клока всего один (и я надеюсь это клок), и какого черта на него идет clk1, если других clk нет...

хотя как я понимаю вы думали что любое название с любым соединимо, и пытались давать уникальные имена входам - выходам...

это тупиковый путь, у меня сейчас в проекте порядка десятка модулей, с клоками, общими шинами, и некоторые вставляются по 3-4 раза, я бы вскрылся всем давать уникальные имена:))) благо verilog-овцы об это подумали)...

 

имена портов модуля значения не имеют, важно название сигналов, если вы в порт пихаете сигнал который еще не объявлен, он в этом месте и объявиться...

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


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

Спасибо, вроде понял. Все соединилось.

На RTL все соединено. Но выдается ошибка

NgdBuild:604 - logical block 'uutu' with type 'sum' could not be resolved.

A pin name misspelling can cause this, a missing edif or ngc file, case

mismatch between the block name and the edif or ngc file name, or the

misspelling of a type name. Symbol 'sum' is not supported in target

'spartan6'.

И Translate входит в error

 

module Filter1(
input wire ce,clk,
input wire [15:0] in1,
output [15:0] f_out
);
wire [1:0] connect;
wire [15:0] interconnect_w;
line utu (
.clk(clk), 
.ce(ce), 
.d_in(in1[15:0]),
.d_out(interconnect_w [15:0] )

);

sum uutu (
.clk(clk),
.in2(interconnect_w [15:0] ),
.psp(connect [1:0]),
.ce(ce),
.sum_out(f_out[15:0] )
);

PSP ( 
.clk(clk),
.ce(ce),
.b(connect [1:0])
);

еще вопрос. можно ли из txt. файла считывать десятичные цифры. (двоичные уже получилась считать) ?

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

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


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

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

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

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

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

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

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

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

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

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