Jump to content

    

Recommended Posts

Коллеги, никогда не думал, что придется задаваться этим вопросом, но есть ли Opensource аналоги SignalTap, ChipScope?

Сейчас пытаюсь работать с ПЛИС GOWIN, но их GAO это жутко неудобная и глючная штука.

В последней доступной версии Synplify 2018.03 не нашел поддержки данных ПЛИС, так что вариант с использованием Identify не прокатил...

Очень не хочется изобретать свой велосипед.

Share this post


Link to post
Share on other sites

у меня тоже не доступен СигналТап. Я снимал данные в какой нибудь буффер, выгонял их из ПЛИС в бинари файл и подгружал все это дело в modelsim, как в визуализаторе сигналов. За неимением СигналТапа это было жутко круто, чтобы не писать своего

Share this post


Link to post
Share on other sites
8 minutes ago, BSACPLD said:

Можно про подгрузку в modelsim поподробнее? Как вы это делали?

И что это была за ПЛИС вообще без анализатора?

Буфер, любой переходник на усб, и операции файлового ввода-вывода в стимуляторе. Такое часто делают, когда жтаг забыли или его возможности недостаточны для отладки. 

Share this post


Link to post
Share on other sites
10 minutes ago, BSACPLD said:

И что это была за ПЛИС вообще без анализатора?

альтера stratix v после кап ремонта. jtag так и не смог запустить, да и не сильно потом напрягался, через pcie все делаю по быстрому.

10 minutes ago, BSACPLD said:

Можно про подгрузку в modelsim поподробнее? Как вы это делали?

в плис сделал большой буфер, туда сохранял значения нужных мне сигналов, потом этот буфер выплевывал по какому нибудь интерфейсу побыстрее. В последнем варианте я логировал 96 бит данных, через 1g ehternet я его выплевывал udp протоколом. Это примерно 112 записей по 96 бит.
компьютер принимает пакет (можно самопис, можно сниффер wireshark) и сохраняет в файл. Файл я скармливал в modelsim с помощью скрипта. грубо говоря читал из файла по 12 байт (96 бит) и распихивал их по сигналам моделсима. Это как раз я отлаживал pcie сигналы

`timescale 1ns / 1ns
module main_test_bench_125_1; 
	//Сигналы для вывода на осцилограмму
	reg     	clk_250Mhz; 					//Осцилограмма генератора 250Mhz
	reg [31:0]	counter;
	reg [4:0]	ltssm;
	reg [3:0]	lane_active;
	reg			pcie_perst;
	reg			reconfig_busy;
	reg	[1:0]	power_down_0;
	reg	[1:0]	power_down_1;
	reg	[1:0]	power_down_2;
	reg	[1:0]	power_down_3;
	reg	[1:0]	power_down_4;
	reg	[1:0]	power_down_5;
	reg	[1:0]	power_down_6;
	reg	[1:0]	power_down_7;
	reg			tx_busy;
	reg			rx_busy;
	reg	[23:0]	timer_counter;
	reg			reset;
	reg			pld_use;
	reg			refclk_locked;
	reg			refclk;


	

	//Вспомогательные переменные
	integer 	file_log;						//Указатель на файл с логами

	initial
	begin
		//log_row_id_prev = 0;
		
		//Пытаемся открыть файл с логами
		file_log = $fopen("udp_dump.bin", "rb");
		if (file_log == 0) 
		begin
			$display("Log file open FAILED");
			$finish;
		end
		
		//Имитируем тактовый генератор 100Mhz
		clk_250Mhz  = 1'b0;			//Начальное значение 0
		#2;							//Задержка сигнала 5нс (100Mhz = такт 10нс, 5нс - полу такт)
		repeat(24999999)
		begin
			clk_250Mhz  = 1'b1;		//Ставим генератор в 1
			#2  clk_250Mhz  = 1'b0;	//Ждем 5нс и ставим генератор в 0, фактически имитируем сигнал 1 в течении 5нс
			#2;						//Ждем 5нс и ставим генератор в 1, фактически имитируем сигнал 0 в течении 5нс, получаем 1 такт длительностью 10нс
		end
		clk_250Mhz  = 1'b1;
		#2;
	end

	//На каждый такт генератора читаем данные из файла и выводим их в сигналы осцилограммы
	reg [7:0]	byte_1;
	reg [7:0]	byte_2;
	reg [7:0]	byte_3;	
	reg [7:0]	byte_4;	
	reg [7:0]	byte_5;	
	reg [7:0]	byte_6;	
	reg [7:0]	byte_7;	
	reg [7:0]	byte_8;	
	reg [7:0]	byte_9;	
	reg [7:0]	byte_10;	
	reg [7:0]	byte_11;	
	reg [7:0]	byte_12;	
	
	
	always @(posedge clk_250Mhz) 
	begin
		byte_1 = 0;
		byte_2 = 0;
		byte_3 = 0;
		byte_4 = 0;
		byte_5 = 0;
		byte_6 = 0;		
		byte_7 = 0;
		byte_8 = 0;
		byte_9 = 0;
		byte_10 = 0;
		byte_11 = 0;
		byte_12 = 0;
		
		$fread(byte_1, file_log);
		$fread(byte_2, file_log);
		$fread(byte_3, file_log);
		$fread(byte_4, file_log);
		$fread(byte_5, file_log);
		$fread(byte_6, file_log);
		$fread(byte_7, file_log);
		$fread(byte_8, file_log);
		$fread(byte_9, file_log);
		$fread(byte_10, file_log);
		$fread(byte_11, file_log);
		$fread(byte_12, file_log);
	
		if ({byte_1, byte_2, byte_3, byte_4, byte_5, byte_6, byte_7, byte_8, byte_9, byte_10, byte_11, byte_12} > 0) begin
			counter			= {byte_1[7:0], byte_2[7:0], byte_3[7:0], byte_4[7:0]};
			ltssm			= {byte_5[7:3]};
			lane_active		= {byte_5[2:0], byte_6[7]};
			pcie_perst		= byte_6[6];
			reconfig_busy	= byte_6[5];
			power_down_0	= byte_6[4:3];
			power_down_1	= byte_6[2:1];
			power_down_2	= {byte_6[0], byte_7[7]};
			power_down_3	= byte_7[6:5];
			power_down_4	= byte_7[4:3];
			power_down_5	= byte_7[2:1];
			power_down_6	= {byte_7[0], byte_8[7]};
			power_down_7	= byte_8[6:5];
			tx_busy			= byte_8[4];
			rx_busy			= byte_8[3];
			timer_counter	= {byte_8[2:0], byte_9[7:0], byte_10[7:0], byte_11[7:3]};
			reset			= byte_11[2];
			pld_use			= byte_11[1];
			refclk_locked	= byte_11[0];
			refclk			= byte_12[7];
		end
	end	
	
	initial
	#1000000000 $stop;			//После 1млрд наносекунд (=1 сек), заканчиваем моделирование
endmodule

 

Edited by new123

Share this post


Link to post
Share on other sites

Приветствую!

1 hour ago, BSACPLD said:

но есть ли Opensource аналоги SignalTap, ChipScope?

Я в теме new123  кидал ссылку на что то похожее на ChipScope на базе uart. 

Удачи! Rob.

 

  

Share this post


Link to post
Share on other sites
1 hour ago, BSACPLD said:

... но есть ли Opensource аналоги SignalTap, ChipScope?

Очень не хочется изобретать свой велосипед.

Есть еще вот такой велосипед(ы):
1. https://opencores.org/projects/fpo

2. https://opencores.org/projects/openjtag-project

Share this post


Link to post
Share on other sites
23 часа назад, new123 сказал:

компьютер принимает пакет (можно самопис, можно сниффер wireshark) и сохраняет в файл. 

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

Никаких промежуточных файлов.

Share this post


Link to post
Share on other sites
46 минут назад, one_eight_seven сказал:

Матлаб уже OpenSource?

Прочитайте внимательно цитату на которую я ответил. Матлаб я применяю не вместо SignalTap:nea:, а для приёма по сети ethernet захваченных данных и последующего парсинга.

Выше рекомендовали wireshark с сохранением в файл... В матлабе это делать проще.

Share this post


Link to post
Share on other sites

Приветствую! 

On 3/23/2019 at 2:56 PM, _sda said:

Прочитайте внимательно цитату на которую я ответил. Матлаб я применяю не вместо SignalTap:nea:, а для приёма по сети ethernet захваченных данных и последующего парсинга.

Выше рекомендовали wireshark с сохранением в файл... В матлабе это делать проще.

оффтоп:  У меня один знакомый ставил matlab  чтобы им как калькулятором пользоваться  "... удобно мол - историю сохраняет ..." :wacko2:

На том же python прием по UDP/TCP  и запись в файл делается на десятке строк кода. Еще на паре десятков - realtime парсинг и рисовка картинок как в том же matlab.  Понятно дело если matlab  уже сп. стоит то грех добру пропадать  :biggrin:.

Удачи! Rob.

Share this post


Link to post
Share on other sites
On 3/22/2019 at 1:47 PM, BSACPLD said:

И что это была за ПЛИС вообще без анализатора?

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this