bogaev_roman 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба С 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 опередил :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hankot3 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба Спасибо. я оба опробую. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба а под ресетом цикла не надо? hift_reg[j] <= 0; не круто, integer j; оно вообще не имеет значения... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба а под ресетом цикла не надо? hift_reg[j] <= 0; не круто, integer j; оно вообще не имеет значения... Цикл надо, пропустил. Не имеет значение что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба с циклом все становиться нормально. без hift_reg[j] <= 0 - очень плохо, потому что j объявлено integer j; и не имеет значения, ничему не равно integer j = 0; так лучше ИМХО Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба с циклом все становиться нормально. без hift_reg[j] <= 0 - очень плохо, потому что j объявлено integer j; и не имеет значения, ничему не равно integer j = 0; так лучше ИМХО Диапазон значений для j задаются в for, смысл задавать ему начальное значение, хотя для наглядности возможно и стоит. Ps Все, понял о чем Вы писали. Имеется ввиду либо цикл под сбросом, либо оставить кусок как есть, просто задать начальное значение в явном виде для j, что равнозначно hift_reg[0] <= 0 . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hankot3 0 5 июня, 2015 Опубликовано 5 июня, 2015 (изменено) · Жалоба та блин, один фиг , все время вижу..такую картинку(((( 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 Изменено 5 июня, 2015 пользователем Hankot3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба если у вас регистр равен ничто, то когда вы его передаете другим чему они равны:)? ресет дерните! в 1 варианта ресета ваще нет, там надо регистры хоть как-то задать... или ждать наполнения со входа во 2 варианте ресет асинхронный, ему нужен четкий фронт из 0 в 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hankot3 0 5 июня, 2015 Опубликовано 5 июня, 2015 (изменено) · Жалоба если у вас регистр равен ничто, то когда вы его передаете другим чему они равны:)? ресет дерните! в 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 и вот результат же Изменено 5 июня, 2015 пользователем Hankot3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба У вас ошибки в коде. Он в принципе и компилироваться не должен. Если это код скопированный прямо из среды, то возможно вам стоит обратить на это внимание. (bigin в 18ой строке) Во-вторых соблюдайте форматирование нормальное. Оно ведь отображает вложенность. это позволяет проще ориентироваться. Ну и в третьих вы можете в своей среде моделирования посмотреть что регистр заполняется, кроме последнего слова. Все как у вас в коде и описано. Обратите внимание на 23 строку. При том как у вас написано вам нужно перебирать не до N-1, а до N потому что вы начинаете с 1, а не с 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба так я дергал или так не пойдет ? у вас переход из непойми чего в 1, для асинхронного сброса, для симуляции надо переход из 0 в 1 четко... так что сначала 0 задайте, а потом только 1 ну и все что сказано выше%) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hankot3 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба у вас переход из непойми чего в 1, для асинхронного сброса, для симуляции надо переход из 0 в 1 четко... так что сначала 0 задайте, а потом только 1 ну и все что сказано выше%) ОГРОМНОЕ СПАСИБО ВСЕ ЗАРАБОТАЛО!!!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hankot3 0 6 июня, 2015 Опубликовано 6 июня, 2015 · Жалоба Можно ли так соединять модули меж собой ?? если да то где меня ошибка. ( идея: в общий модуль соеденить линию задержки и суматор с умножением данных с линии задержки ) 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) ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 6 июня, 2015 Опубликовано 6 июня, 2015 · Жалоба ошибка что в такой записи 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-овцы об это подумали)... имена портов модуля значения не имеют, важно название сигналов, если вы в порт пихаете сигнал который еще не объявлен, он в этом месте и объявиться... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hankot3 0 7 июня, 2015 Опубликовано 7 июня, 2015 (изменено) · Жалоба Спасибо, вроде понял. Все соединилось. На 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. файла считывать десятичные цифры. (двоичные уже получилась считать) ? Изменено 7 июня, 2015 пользователем Hankot3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться