Krod 0 10 апреля, 2013 Опубликовано 10 апреля, 2013 · Жалоба Здравствуйте Есть код на verilog: module hi_read_tx( pck0, ck_1356meg, ck_1356megb, pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4, adc_d, adc_clk, ssp_frame, ssp_din, ssp_dout, ssp_clk, cross_hi, cross_lo, dbg, shallow_modulation ); input pck0, ck_1356meg, ck_1356megb; output pwr_lo, pwr_hi, pwr_oe1, pwr_oe2, pwr_oe3, pwr_oe4; input [7:0] adc_d; output adc_clk; input ssp_dout; output ssp_frame, ssp_din, ssp_clk; input cross_hi, cross_lo; output dbg; input shallow_modulation; // The high-frequency stuff. For now, for testing, just bring out the carrier, // and allow the ARM to modulate it over the SSP. reg pwr_hi; reg pwr_oe1; reg pwr_oe2; reg pwr_oe3; reg pwr_oe4; always @(ck_1356megb or ssp_dout or shallow_modulation) begin if(shallow_modulation) begin pwr_hi <= ck_1356megb; pwr_oe1 <= ~ssp_dout; pwr_oe2 <= ~ssp_dout; pwr_oe3 <= ~ssp_dout; pwr_oe4 <= 1'b0; end else begin pwr_hi <= ck_1356megb & ssp_dout; pwr_oe1 <= 1'b0; pwr_oe2 <= 1'b0; pwr_oe3 <= 1'b0; pwr_oe4 <= 1'b0; end end // Then just divide the 13.56 MHz clock down to produce appropriate clocks // for the synchronous serial port. // This is used for ISO14443-B reg [6:0] hi_div_by_128; always @(posedge ck_1356meg) hi_div_by_128 <= hi_div_by_128 + 1; assign ssp_clk = hi_div_by_128[6]; reg [2:0] hi_byte_div; always @(negedge ssp_clk) hi_byte_div <= hi_byte_div + 1; assign ssp_frame = (hi_byte_div == 3'b000); // Implement a hysteresis to give out the received signal on // ssp_din. Sample at fc. assign adc_clk = ck_1356meg; // ADC data appears on the rising edge, so sample it on the falling edge reg after_hysteresis; always @(negedge adc_clk) begin if(& adc_d[7:0]) after_hysteresis <= 1'b1; else if(~(| adc_d[7:0])) after_hysteresis <= 1'b0; end assign ssp_din = after_hysteresis; assign pwr_lo = 1'b0; assign dbg = ssp_din; endmodule Код из опенсорс-проекта proxmark3. Тестбенч к нему: `include "hi_read_tx.v" /* pck0 - input main 24Mhz clock (PLL / 4) [7:0] adc_d - input data from A/D converter shallow_modulation - modulation type pwr_lo - output to coil drivers (ssp_clk / 8) adc_clk - output A/D clock signal ssp_frame - output SSS frame indicator (goes high while the 8 bits are shifted) ssp_din - output SSP data to ARM (shifts 8 bit A/D value serially to ARM MSB first) ssp_clk - output SSP clock signal ck_1356meg - input unused ck_1356megb - input unused ssp_dout - input unused cross_hi - input unused cross_lo - input unused pwr_hi - output unused, tied low pwr_oe1 - output unused, undefined pwr_oe2 - output unused, undefined pwr_oe3 - output unused, undefined pwr_oe4 - output unused, undefined dbg - output alias for adc_clk */ module testbed_hi_read_tx; reg pck0; reg [7:0] adc_d; reg shallow_modulation; wire pwr_lo; wire adc_clk; reg ck_1356meg; reg ck_1356megb; wire ssp_frame; wire ssp_din; wire ssp_clk; reg ssp_dout; wire pwr_hi; wire pwr_oe1; wire pwr_oe2; wire pwr_oe3; wire pwr_oe4; wire cross_lo; wire cross_hi; wire dbg; hi_read_tx #(5,200) dut( .pck0(pck0), .ck_1356meg(ck_1356meg), .ck_1356megb(ck_1356megb), .pwr_lo(pwr_lo), .pwr_hi(pwr_hi), .pwr_oe1(pwr_oe1), .pwr_oe2(pwr_oe2), .pwr_oe3(pwr_oe3), .pwr_oe4(pwr_oe4), .adc_d(adc_d), .adc_clk(adc_clk), .ssp_frame(ssp_frame), .ssp_din(ssp_din), .ssp_dout(ssp_dout), .ssp_clk(ssp_clk), .cross_hi(cross_hi), .cross_lo(cross_lo), .dbg(dbg), .shallow_modulation(shallow_modulation) ); integer idx, i; // main clock always #5 begin ck_1356megb = !ck_1356megb; ck_1356meg = ck_1356megb; end //crank DUT task crank_dut; begin @(posedge ssp_clk); ssp_dout = $random; end endtask initial begin // init inputs ck_1356megb = 0; adc_d = 0; ssp_dout=0; // shallow modulation off shallow_modulation=0; for (i = 0; i < 16; i = i + 1) begin crank_dut; end // shallow modulation on shallow_modulation=1; for (i = 0; i < 16; i = i + 1) begin crank_dut; end $finish; end endmodule // main Вот что выдает Modelsim 6.5b в Windows XP при симуляции: vsim -novopt work.testbed_hi_read_tx # vsim -novopt work.testbed_hi_read_tx # Refreshing C:\fpga\work.testbed_hi_read_tx # Loading work.testbed_hi_read_tx # Refreshing C:\fpga\work.hi_read_tx # Loading work.hi_read_tx # ** Error: (vsim-3006) C:/fpga/testbed_hi_read_tx.v(70): Too many inherited module instance parameters. # Region: /testbed_hi_read_tx # Error loading design Пробовал включать/отключать оптимизацию-не помогло. Если удалить в строке 50 тестбенча строку #(5,200), то симулятор запускается, но кроме синхросигналов ничего не отображается. Нужно ли переписывать тестбенч с нуля? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winipuh 0 10 апреля, 2013 Опубликовано 10 апреля, 2013 · Жалоба Вот что выдает Modelsim 6.5b в Windows XP при симуляции: # ** Error: (vsim-3006) C:/fpga/testbed_hi_read_tx.v(70): Too many inherited module instance parameters. Если удалить в строке 50 тестбенча строку #(5,200), то симулятор запускается Вы сами себе уже ответили. Если не поняли - читайте про параметры модуля (например, здесь). кроме синхросигналов ничего не отображается. Нужно ли переписывать тестбенч с нуля?А что должно отображаться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krod 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Этот модуль занимается модуляцией сигнала. В симуляторе должны отображаться модулируемая несущая и тому подобные красивые картинки, но я ничего не вижу. См. скриншот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Есть код на verilog: .... always @(ck_1356megb or ssp_dout or shallow_modulation) begin if(shallow_modulation) begin Как Вы себе представляете такие конструкции? Ваш проект не имеет единой синхрочастоты, это какой то набор частот или сигналов не связанных между собой. Так не годится, обычно все гораздо легче привести к единой синхрочастоте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winipuh 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Этот модуль занимается модуляцией сигнала. В симуляторе должны отображаться модулируемая несущая и тому подобные красивые картинки, но я ничего не вижу. См. скриншот. Юморист :) Серьезно, в чем проблема то? Вы хоть намекните какой у Вас уровень знаний по Verilog и т.п. Если буду объяснять то, что Вы и так знаете, то Вы обидитесь. 1) Обратите внимание на сигналы ssp_clk и ssp_frame. Они в состоянии 'X'. Это плохо. :) 2) Добавьте в модуль hi_read_tx (где-нибудь в конце) следующее: initial begin hi_div_by_128 = 7'd0; hi_byte_div = 3'd0; end 3) Отпишитесь о результатах :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krod 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Данный код не мой, я лишь пытаюсь запустить его в Modelsim'е чтобы понять как работает обработка сигналов. Вот ссылка на SVN: https://code.google.com/p/proxmark3/source/...%2Ftrunk%2Ffpga Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winipuh 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба Данный код не мой, я лишь пытаюсь запустить его в Modelsim'е чтобы понять как работает обработка сигналов. Это понятно. :) Рекомендую почитать и немного разобраться в верилоге, чтобы с бубном не прыгать. Выше приведен кусок кода. Вставьте его в hi_read_tx.v (в конце описания, перед словом "endmodule"). Скомпилируйте и запустите моделирование. Убедитесь, что на "ssp_clk" действительно есть клок (частотой ниже ck_1356meg в 128 раз). Удачи. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krod 0 11 апреля, 2013 Опубликовано 11 апреля, 2013 · Жалоба winipuh Да, действительно, клок появился. По поводу моих познаний в Verilog и Modelsim - изучал примитивные конструкции(счетчики, делители и т.д.), ну и читал пару книг. Решил взяться за более сложные и интересные проекты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krod 0 12 апреля, 2013 Опубликовано 12 апреля, 2013 · Жалоба Еще одна проблема: При запуске другого тестбенча(https://code.google.com/p/proxmark3/source/.../testbed_fpga.v) выдает ошибку # ** Error: (vsim-3033) fpga.v(48): Instantiation of 'IBUFG' failed. The design unit was not found. # Region: /testbed_fpga/dut # Searched libraries: # C:\fpga\work Modelsim не может найти какую-то внешнюю библиотеку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
winipuh 0 12 апреля, 2013 Опубликовано 12 апреля, 2013 · Жалоба Еще одна проблема: При запуске другого тестбенча(https://code.google.com/p/proxmark3/source/.../testbed_fpga.v) выдает ошибку # ** Error: (vsim-3033) fpga.v(48): Instantiation of 'IBUFG' failed. The design unit was not found. Вам Моделсим конкретно сказал ГДЕ проблема: Error: (vsim-3033) fpga.v(48) - файл fpga.v, строчка 48... :krapula: Видите вверху `include "fpga.v"? Теперь смотрите сюда. Конкретно вот в это место: //assign pck0 = pck0i; IBUFG #(.IOSTANDARD("DEFAULT") ) pck0b( .O(pck0), .I(pck0i) ); //assign spck = spcki; IBUFG #(.IOSTANDARD("DEFAULT") ) spckb( .O(spck), .I(spcki) ); Здесь два инстанса модулей IBUFG. Это примитивы FPGA Xilinx. Instantiation of 'IBUFG' failed - Моделсим не нашел в проекте верилоговских исходников с описанием такого модуля, и не нашел библиотеку с этими модулями (либо Вы ее не подключили) - The design unit was not found. Вариантов два: 1) Раскомментарить строчки assign pck0 = pck0i, assign spck = spcki, закомментарить инстансы IBUFG. 2) Найти и подключить нужную библиотеку. Если библиотеки нет - скомпилировать с помощью xcomplib (в поставке Xilinx ISE). Рекомендую первый вариант. И вообще... Хватит с бубном прыгать! Разберитесь хоть немного в верилоге, ёптыть!!! :) P.S. Первый раз встречаю исходники, где автор маниакально инклудит верилоговские файлы друг в друга... :cranky: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться