Booleek789 0 7 мая Опубликовано 7 мая · Жалоба Скачал ModelSim. Написал на Верилоге простой проект "Исключающее-ИЛИ" с тремя входами. Попробовал симулировать работу элемента. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 6 8 мая Опубликовано 8 мая · Жалоба On 5/6/2024 at 1:18 PM, quest said: Если уровень плис подготовки ненулевой, способны в коде разбираться, то ищите LEON SPARC. LEON с троированием и обнаружением/коррекцией ошибок в свободном доступе мне не попадался. Да, в коде и доках есть какие-то огрызки или общие куски, типа, странного crt0 с tmr-щиной, но не думаю, что это поможет понять. Для освоения "процессоростроения" LEON/NOEL слишком непросто написан, лучше брать какойнибудь простой RiscV, например открытое ядро от синтакора И небольшой совет автору топика - обратите внимание на бесплатные средства проектирования icarus verilog, verilator - если (что может быть и маловероятно) понадобится статью буржуям написать или какое-то сотрудничество, то они спросят, откуда моделсим взялся. Verilator вообще монструозная вещь, но чтоб заработал надо постараться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Booleek789 0 8 мая Опубликовано 8 мая · Жалоба 1 hour ago, yes said: И небольшой совет автору топика - обратите внимание на бесплатные средства проектирования icarus verilog, verilator - если (что может быть и маловероятно) понадобится статью буржуям написать или какое-то сотрудничество, то они спросят, откуда моделсим взялся. Verilator вообще монструозная вещь, но чтоб заработал надо постараться Хорошо, посмотрю что за проги и буду иметь ввиду. Подскажите ещё по одному моменту. В Simulink собрал модель, которая просто инвертирует входной сигнал (элемент НЕ), конвертировал её в Verilog и файл тестбенча (с помощью HDL Coder). Загружаю в ModelSim оба файла, но ни один их них не эмулируется. Как я понял, тестбенч включает в себя всевозможные режимы логической схемы, и по идее, симулятор должен их сам переключать. Но ничего не происходит. То ли я неверно понимаю принцип работы тестбенча, то ли файлы составлены неверно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 8 мая Опубликовано 8 мая · Жалоба В 07.05.2024 в 15:18, Booleek789 сказал: Скачал ModelSim. Написал на Верилоге простой проект "Исключающее-ИЛИ" с тремя входами. Попробовал симулировать работу элемента. И как? 4 часа назад, Booleek789 сказал: Как я понял, тестбенч включает в себя всевозможные режимы логической схемы, и по идее, симулятор должен их сам переключать. Симулятор исполняет тестбенч, что в тестбенче написано так и будут переключатся сигналы входных воздействий. Сам симулятор ничего не переключает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Booleek789 0 8 мая Опубликовано 8 мая (изменено) · Жалоба 1 hour ago, Jackov said: И как? 1 hour ago, Jackov said: Симулятор исполняет тестбенч, что в тестбенче написано так и будут переключатся сигналы входных воздействий. Сам симулятор ничего не переключает. Пытаюсь с этим разобраться. Симулинк генерирует несколько файлов, среди которых есть файлы в формате .do. Если их открыть, то можно увидеть, что это инструкции в формате "открыть это, записать то" и т.д. vlib work vlog symmetric_fir.v vlog symmetric_fir_tb.v В классическом варианте эти файлы выполняются с помощью команды QuestaSim>do через рабочее окно Матлаба. Но похоже моя версия МодельСим не дружит с версией Матлаба R2024а, т.к. QuestaSim>do попросту не работает. Надежда есть на то, что получится проделать все инструкции вручную. Ведь если посмотреть на содержимое .do файлов, можно понять, что именно они делают. Так вот, коды Верилога в формате .v в МодельСим я загрузил и скомпилировал. Всё в порядке. Но как быть со вторым набором инструкций, которые как раз и назначают входам модели нужные сигналы? Выглядит этот файл так: onbreak resume onerror resume vsim -voptargs=+acc work.symmetric_fir_tb add wave sim:/symmetric_fir_tb/u_symmetric_fir/clk add wave sim:/symmetric_fir_tb/u_symmetric_fir/reset add wave sim:/symmetric_fir_tb/u_symmetric_fir/clk_enable add wave sim:/symmetric_fir_tb/u_symmetric_fir/x_in add wave sim:/symmetric_fir_tb/u_symmetric_fir/h_in1 add wave sim:/symmetric_fir_tb/u_symmetric_fir/h_in2 add wave sim:/symmetric_fir_tb/u_symmetric_fir/h_in3 add wave sim:/symmetric_fir_tb/u_symmetric_fir/h_in4 add wave sim:/symmetric_fir_tb/u_symmetric_fir/ce_out add wave sim:/symmetric_fir_tb/u_symmetric_fir/y_out add wave sim:/symmetric_fir_tb/y_out_ref add wave sim:/symmetric_fir_tb/u_symmetric_fir/delayed_xout add wave sim:/symmetric_fir_tb/delayed_xout_ref run -all Я брал за основу вот этот пример: Verify Generated Code Using HDL Test Bench from Configuration Parameters Изменено 8 мая пользователем Booleek789 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 8 мая Опубликовано 8 мая · Жалоба 6 часов назад, Booleek789 сказал: В Simulink собрал модель, которая просто инвертирует входной сигнал (элемент НЕ), конвертировал её в Verilog и файл тестбенча (с помощью HDL Coder). Загружаю в ModelSim оба файла Есть приличные книги: 1.Цифровая схемотехника и архитектура компьтера: RISC-V Сара Л. Харрис, Девид Харрис 2. Цифровой синтез. Практический курс. А.Ю. Романова, Ю.В. Панчула 3.Логическое проектирование встраиваемых систем на FPGA Валерий Соловьев. Для практики Соловьев Вам в помощь. Прямо в моделсиме создавайте свои проекты и моделируйте. Имеет смысл создавать свои проекты в ВИВАДО. Ибо китайские плис xilinx подобные. У Китая есть плис радиационно стойкие. А вообще наверно полетят любые. Вот только неизвестно, сколько прослужат. ct.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 8 мая Опубликовано 8 мая · Жалоба 7 часов назад, Booleek789 сказал: Но как быть со вторым набором инструкций, которые как раз и назначают входам модели нужные сигналы? Выглядит этот файл так: Это тоже скрипт МоделСима, назначает вывод нужных сигналов на временную диаграмму и указывает в каком виде они будут показаны. Посмотрите серии 11 и 12 из этого плейлиста, поможет разобраться что есть что https://www.youtube.com/playlist?list=PL4UMfOeGYsvblwrP3VYKHq11xgkxVqoUj Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Booleek789 0 9 мая Опубликовано 9 мая (изменено) · Жалоба 9 hours ago, sazh said: Есть приличные книги: 1.Цифровая схемотехника и архитектура компьтера: RISC-V Сара Л. Харрис, Девид Харрис 2. Цифровой синтез. Практический курс. А.Ю. Романова, Ю.В. Панчула 3.Логическое проектирование встраиваемых систем на FPGA Валерий Соловьев. Для практики Соловьев Вам в помощь. Прямо в моделсиме создавайте свои проекты и моделируйте. Имеет смысл создавать свои проекты в ВИВАДО. Ибо китайские плис xilinx подобные. У Китая есть плис радиационно стойкие. А вообще наверно полетят любые. Вот только неизвестно, сколько прослужат. ct.zip 829 B · 8 downloads Большое спасибо за рекомендации. Начну с Соловьёва. 2 hours ago, Jackov said: Это тоже скрипт МоделСима, назначает вывод нужных сигналов на временную диаграмму и указывает в каком виде они будут показаны. Посмотрите серии 11 и 12 из этого плейлиста, поможет разобраться что есть что https://www.youtube.com/playlist?list=PL4UMfOeGYsvblwrP3VYKHq11xgkxVqoUj Спасибо! Вы правы. По сути это практически те же команды, которые прописываются в МодельСиме при ручном назначении входных сигналов. Изменено 9 мая пользователем Booleek789 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Booleek789 0 9 мая Опубликовано 9 мая · Жалоба Получилось запустить макросы .do с помощью внутренних средств ModelSim (File->Load->Macro File...). Что-то автоматически смоделировалось, правда, в какой-то момент расчёты прекратились (ошибку пока не анализировал, поэтому не знаю, в чём дело). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
keats sun 3 14 июня Опубликовано 14 июня · Жалоба Здравствуйте,Какую FPGA вы используете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Booleek789 0 27 июня Опубликовано 27 июня (изменено) · Жалоба On 6/14/2024 at 7:49 AM, keats sun said: Здравствуйте,Какую FPGA вы используете? Здравствуйте, пока никакую конкретную не использую, просто разбираюсь с HDL. Хочу разобраться с тем, как на ПЛИС реализовываются различные вычисления (сложение, умножение и т.д.). Если с арифметикой всё более-менее понятно (двоичная арифметика, сдвиги, знак в старшем бите и т.д.), то с логарифмами, экспонентами и прочим всё сложнее. Слышал про CORDIC. Захотелось посмотреть, как математику в HDL переводит Матлаб. Посмотрите пожалуйста что получилось. Что скажете, насколько полученный код хорош/плох? Вот схема, которую Матлаб преобразовал в HDL. // Generated by MATLAB 24.1, HDL Coder 24.1, and Simulink 24.1 // // // -- ------------------------------------------------------------- // -- Rate and Clocking Details // -- ------------------------------------------------------------- // Model base rate: 0.2 // Target subsystem base rate: 0.2 // // // Clock Enable Sample Time // -- ------------------------------------------------------------- // ce_out 0.2 // -- ------------------------------------------------------------- // // // Output Signal Clock Enable Sample Time // -- ------------------------------------------------------------- // out ce_out 0.2 // -- ------------------------------------------------------------- // // ------------------------------------------------------------- // ------------------------------------------------------------- // // Module: untitled // Source Path: untitled // Hierarchy Level: 0 // Model version: 1.0 // // ------------------------------------------------------------- `timescale 1 ns / 1 ns module untitled (clk, reset_x, clk_enable, a, b, ce_out, out); input clk; input reset_x; input clk_enable; input [63:0] a; // double input [63:0] b; // double output ce_out; output [63:0] out; // double wire enb; real a_double; // double real b_double; // double real Product_out1; // double real Delay_reg [0:8]; // double [9] real Delay_reg_next [0:8]; // double [9] real Delay_out1; // double reg signed [31:0] Delay_t_0_0; // int32 reg signed [31:0] Delay_t_0_1; // int32 reg signed [31:0] Delay_t_1; // int32 always @* a_double = $bitstoreal(a); always @* b_double = $bitstoreal(b); always @* Product_out1 = a_double * b_double; assign enb = clk_enable; always @(posedge clk or posedge reset_x) begin : Delay_process if (reset_x == 1'b1) begin for(Delay_t_1 = 32'sd0; Delay_t_1 <= 32'sd8; Delay_t_1 = Delay_t_1 + 32'sd1) begin Delay_reg[Delay_t_1] <= 0.0; end end else begin if (enb) begin for(Delay_t_0_1 = 32'sd0; Delay_t_0_1 <= 32'sd8; Delay_t_0_1 = Delay_t_0_1 + 32'sd1) begin Delay_reg[Delay_t_0_1] <= Delay_reg_next[Delay_t_0_1]; end end end end always @* begin Delay_out1 = Delay_reg[8]; Delay_reg_next[0] = Product_out1; for(Delay_t_0_0 = 32'sd0; Delay_t_0_0 <= 32'sd7; Delay_t_0_0 = Delay_t_0_0 + 32'sd1) begin Delay_reg_next[Delay_t_0_0 + 32'sd1] = Delay_reg[Delay_t_0_0]; end end assign out = $realtobits(Delay_out1); assign ce_out = clk_enable; endmodule // untitled Изменено 27 июня пользователем Booleek789 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 6 27 июня Опубликовано 27 июня · Жалоба Booleek789 Код никуда не годится, в симулинке в синтезируемой части у вас не должно быть типа double, только с фиксированной точкой ufix, sfix, изучайте преобразование типов в симулинке, матлабе, fixdt(), fi(). Генерировать лучше в VHDL как более стрктурированный, читаемый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Skryppy 1 Воскресенье в 19:22 Опубликовано Воскресенье в 19:22 · Жалоба Думаю эта книга вам будет интересна: ПЛИС для аэрокосмической области. Матлаб делает работоспособный код для ПЛИС, много лет его используем, всё ОК. Также посмотрите библиотеку System Generator и Stateflow для ПЛИС в Матлабе, также получается рабочий код HDL, причём можно сделать как IP ядро всей системы, так и HDL(VHDL, Verilog). Генерировать код всё-таки лучше в Verilog из Матлаб, т.к. с VHDL бывают косяки - может в проекте модуль выше по коду использовать, когда описание самого модуля ниже, приходится вручную вырезать код и редактировать его. Так что в последнее время генерим на Verilog, меньше ошибок при генерации и нет проблем с подключением библиотек. Книга для начинающих:Фрэнк Бруно 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Booleek789 0 Вчера в 03:47 Опубликовано вчера в 03:47 · Жалоба On 7/1/2024 at 12:22 AM, Skryppy said: Думаю эта книга вам будет интересна: ПЛИС для аэрокосмической области. Матлаб делает работоспособный код для ПЛИС, много лет его используем, всё ОК. Также посмотрите библиотеку System Generator и Stateflow для ПЛИС в Матлабе, также получается рабочий код HDL, причём можно сделать как IP ядро всей системы, так и HDL(VHDL, Verilog). Генерировать код всё-таки лучше в Verilog из Матлаб, т.к. с VHDL бывают косяки - может в проекте модуль выше по коду использовать, когда описание самого модуля ниже, приходится вручную вырезать код и редактировать его. Так что в последнее время генерим на Verilog, меньше ошибок при генерации и нет проблем с подключением библиотек. Книга для начинающих:Фрэнк Бруно Спасибо за очень полезную информацию и ссылки! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Booleek789 0 7 часов назад Опубликовано 7 часов назад · Жалоба Я тут вот такую штуку сделал. Это имитация дребезга контактов и его устранение. module randnum (signal, clock, r, c_out, pos_neg_edge, signal_for_rattling, mask_for_signal, signal_with_rattling, signal_after_filtering_from_bouncing); input signal; input clock; reg [3:0] n; reg c; reg [$clog2(DEBOUNCE_LIMIT)-1:0] r_Count = 0; reg r_State = 1'b0; output [3:0] r; output c_out; output pos_neg_edge; output signal_for_rattling; output mask_for_signal; output signal_with_rattling; output signal_after_filtering_from_bouncing; //Parameters parameter DELAY = 10; parameter DEBOUNCE_LIMIT = 20; reg [DELAY-1:0] signal_delay; // always @(posedge clock) begin n <= $random%15; signal_delay <= {signal_delay[DELAY-2:0], signal}; if (signal_with_rattling !== r_State && r_Count < DEBOUNCE_LIMIT-1) begin r_Count <= r_Count + 1; end else if (r_Count == DEBOUNCE_LIMIT-1) begin r_State <= signal_with_rattling; r_Count <= 0; end else begin r_Count <= 0; end end assign r = n; assign c_out = ($signed(n) < $signed(4'b0000)) ? 1'b1 : 1'b0; assign pos_neg_edge = (signal != signal_delay[DELAY-1]) ? 1'b1 : 1'b0; assign signal_for_rattling = signal || pos_neg_edge; assign mask_for_signal = !(c_out && pos_neg_edge); assign signal_with_rattling = signal_for_rattling && mask_for_signal; assign signal_after_filtering_from_bouncing = r_State; endmodule И тестбенч: `timescale 1ns / 1ps module randnum_tb; // Inputs reg clock; reg signal; // Outputs wire [3:0] r; wire c_out; wire pos_neg_edge; wire signal_for_rattling; wire mask_for_signal; wire signal_with_rattling; wire signal_after_filtering_from_bouncing; // Instantiate the Unit Under Test (UUT) randnum uut (.signal(signal),.clock(clock),.r(r),.c_out(c_out),.pos_neg_edge(pos_neg_edge),.signal_for_rattling(signal_for_rattling),.mask_for_signal(mask_for_signal),.signal_with_rattling(signal_with_rattling),.signal_after_filtering_from_bouncing(signal_after_filtering_from_bouncing)); initial begin // Initialize Inputs clock = 1'b1; #10; signal = 1'b0; #100; signal = 1'b1; #100; signal = 1'b0; #100; end always #0.5 clock = ~clock; endmodule Проект учебный. Модель дребезга я придумал сам, а блок Debouncing сделал на основе примера из книги Getting Started with FPGAs.Digital Circuit Design, Verilog, and VHDL for Beginners by Russell Merrick на странице 106. Это первое более-менее крупное устройство на ПЛИС для меня. Если будут вопросы, предложения и замечания по коду - пожалуйста пишите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться