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

55 минут назад, DSIoffe сказал:

В списке IP Core Generator оно есть, но неактивно.

Нужно выбрать "правильное" семейство ПЛИС (в данном случае - GW2A), тогда это ядро станет активным :)

Документацию действительно опубликовать не успели. Когда Китай закончит праздновать новый год - попрошу, чтобы выложили.

С китайской страницы сайта скачивается референс дизайн (но доки на ядро в нем тоже нету).

Gowin_MJPEG_Encoder_RefDesign.zip

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


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

Было бы хорошо если бы Gowin в своих ядрах перешли на стандартные шины типа AXI4-Stream / AXI4, а не "куча проводов" как сейчас :)

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


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

Цитата

Документацию действительно опубликовать не успели.

Прислали прелиминари юзер гайд на ядро MJPEG Encoder.

Пока он не опубликован официально, выкладывать в открытый доступ я его не хочу.

Кому нужен - прошу в личку.

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


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

2 часа назад, BSACPLD сказал:

Было бы хорошо если бы Gowin в своих ядрах перешли на стандартные шины типа AXI4-Stream / AXI4, а не "куча проводов" как сейчас :)

ИМХО, "не по Хуану сомбреро".

Вот когда появятся GW5AT (на 128 килолутов), тогда этот вопрос можно поднимать.

А пока ПЛИСки слишком мелкие...

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


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

45 minutes ago, StewartLittle said:

ИМХО, "не по Хуану сомбреро".

В том же AXI4-Stream нет ничего емкого в плане ресурсов.

Вот пример подключения "классического" FIFO на AXI4-Stream:

module axi4s_fifo
#(
	parameter SIZE      = 512,
	parameter WIDTH     = 8,
	parameter TID_WIDTH = 0,
	parameter NUM_SYNC  = 3,
	parameter RST_TYPE  = "ASYNC",		// "ASYNC", 
										// "SYNC_SLAVE", 
										// "SYNC_MASTER"
	
	parameter SIM_INIT  = "FALSE"		// "TRUE", 
										// "FALSE"
)
(
	// Reset
	input axis_aresetn,
	// AXI4-Stream (video input)
	input s_axis_aclk,
	input s_axis_tvalid,
	output s_axis_tready,
	input [WIDTH-1:0] s_axis_tdata,
	input [TID_WIDTH-1:0] s_axis_tid,
	input s_axis_tuser,					// start of frame
	input s_axis_tlast,					// end of line
	// AXI4-Stream (video output)
	input m_axis_aclk,
	output m_axis_tvalid,
	input m_axis_tready,
	output [WIDTH-1:0] m_axis_tdata,
	output [TID_WIDTH-1:0] m_axis_tid,
	output m_axis_tuser,				// start of frame
	output m_axis_tlast					// end of line
) ;

reg reset_n ;

wire [(WIDTH+TID_WIDTH+1+1)-1:0] s_axis_d ;
wire wrfull ;

wire [(WIDTH+TID_WIDTH+1+1)-1:0] m_axis_q ;
wire rdempty ;


initial begin
	if (SIM_INIT == "TRUE") begin
		#0.01 ;
		
		if (RST_TYPE != "ASYNC") 
			reset_n <= 1'b0 ;
	end
end


generate
if (RST_TYPE == "ASYNC") begin
	always @* begin
		reset_n = axis_aresetn ;
	end
end
else if (RST_TYPE == "SYNC_SLAVE") begin
	always @(posedge s_axis_aclk) begin
		reset_n <= axis_aresetn ;
	end
end
else if (RST_TYPE == "SYNC_MASTER") begin
	always @(posedge m_axis_aclk) begin
		reset_n <= axis_aresetn ;
	end
end
endgenerate


generate
if (TID_WIDTH > 0) begin
	assign s_axis_d = {s_axis_tuser, s_axis_tlast, s_axis_tid, s_axis_tdata} ;
end
else begin
	assign s_axis_d = {s_axis_tuser, s_axis_tlast, s_axis_tdata} ;
end
endgenerate

d_c_fifo		#(
				.DATA_WIDTH (WIDTH+TID_WIDTH+1+1),
				.Q_WIDTH    (WIDTH+TID_WIDTH+1+1),
				.DATA_SIZE  (SIZE),
				.NUM_SYNC   (NUM_SYNC),
				.SIM_INIT   (SIM_INIT)
				)
				
				d_c_fifo_0 (
				.reset      (~reset_n),
				.data       (s_axis_d),
				.wrreq      (s_axis_tvalid & s_axis_tready),
				.wrclk      (s_axis_aclk),
				.rdreq      (m_axis_tvalid & m_axis_tready),
				.rdclk      (m_axis_aclk),
				.q          (m_axis_q),
				.wrempty    (),
				.wrfull     (wrfull),
				.rdempty    (rdempty),
				.rdfull     ()
				) ;

generate
if (TID_WIDTH > 0) begin
	assign {m_axis_tuser, m_axis_tlast, m_axis_tid, m_axis_tdata} = m_axis_q ;
end
else begin
	assign {m_axis_tuser, m_axis_tlast, m_axis_tdata} = m_axis_q ;
end
endgenerate

assign s_axis_tready = ~wrfull ;
assign m_axis_tvalid = ~rdempty ;


endmodule

Как видите, это всего лишь переименование сигналов с небольшим количеством логики.

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


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

DK-START-GW1N4

где посмотреть наименование элементов D1 и F1 ?

почему F1 установлен после D1?

2.thumb.jpg.caba6527cbd1fe21a2e16b9752a3bc6f.jpg

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


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

16 часов назад, BSACPLD сказал:

В том же AXI4-Stream нет ничего емкого в плане ресурсов.

А можно в нём создать TDATA шириной 11 бит? Или таки придётся делать 16? И не будет ли синтез нудеть пустыми предупреждениями о неиспользуемых сигналах (с 12 по 15-й)?

 

С AXI4-Stream почти всё хорошо. А вот AXI4 уже далеко не так удобен, если дизайн построен не вокруг какого-нить CPU. Поэтому нативный интерфейс должен быть. Если надо AXI - врапер нахлобучить не так уж сложно.

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


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

1 час назад, dxp сказал:

А можно в нём создать TDATA шириной 11 бит? Или таки придётся делать 16?

В AXI разрядность данных кратна байту. Точнее, 8 битам. Так что да, 11 нельзя, только 16.

2 часа назад, dxp сказал:

И не будет ли синтез нудеть пустыми предупреждениями о неиспользуемых сигналах (с 12 по 15-й)?

Конечно, будет.

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


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

5 hours ago, dxp said:

А можно в нём создать TDATA шириной 11 бит? Или таки придётся делать 16? И не будет ли синтез нудеть пустыми предупреждениями о неиспользуемых сигналах (с 12 по 15-й)?

Ну в моей реализации выше можно и 11 бит :)

При этом она совместима и со стандартной реализацией 16 бит если поставить WIDTH = 16.

5 hours ago, dxp said:

А вот AXI4 уже далеко не так удобен, если дизайн построен не вокруг какого-нить CPU. Поэтому нативный интерфейс должен быть. Если надо AXI - врапер нахлобучить не так уж сложно.

Я делал хитрее.

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

И уже группу модулей объединял в одном большом врапере.

Для экономии ресурсов.

Но хотелось бы чтобы в готовых корках был выбор AXI4 или Native.

Чтобы самому не наворачивать код поверх уже "готовых" модулей.

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


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

6 hours ago, dxp said:

А можно в нём создать TDATA шириной 11 бит? Или таки придётся делать 16?

Можно три старших бита упаковать в TUSER, а восемь оставшихся бит упаковать в TDATA.

Насколько я понял, стандарту IHI0051A это не противоречит.

Это если требуется воспользоваться готовыми IP Cores из PG085.

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


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

Изучаю GOWIN FPGA Designer. Подскажите :

Что это за предупреждение : WARN  (PR1014) : Generic routing resource will be used to clock signal 'clk_d' by the specified constraint. And then it may lead to the excessive delay or skew?

SDC одна строка -> create_clock -name clk -period 10 -waveform {0 5} [get_ports {clk}]

clk на пин назначил.

откуда берется clk_d?

 

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


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

11 минут назад, Freibier сказал:

Изучаю GOWIN FPGA Designer. Подскажите :

А в документации посмотреть не???

 

12 минут назад, Freibier сказал:

Как указать питание банков?

После синтеза, на закладку Process - FloorPlanner, там IO Constraints

 

14 минут назад, Freibier сказал:

Что это за предупреждение : WARN  (PR1014) : Generic routing resource will be used to clock signal 'clk_d' by the specified constraint. And then it may lead to the excessive delay or skew?

Это означает, что у Вас тактовый сигнал разводится по проекту через обычные ресурсы развродки (а не через глобальные линии).

 

16 минут назад, Freibier сказал:

clk на пин назначил.

На какой именно пин? Тактовые сигналы жедательно назначать на глобальные входы GCLK.

 

17 минут назад, Freibier сказал:

откуда берется clk_d?

Из постсинтетического нетлиста. Это выход IO буфера, на вход которого Вы назначили сигнал clk.

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


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

8 минут назад, StewartLittle сказал:

После синтеза, на закладку Process - FloorPlanner, там IO Constraints

Вроде так и сделал.

FloorPlanner

3.thumb.jpg.189e992da0675be1954b04a4e4f91aa9.jpg

отчет

4.thumb.jpg.1c44732718d042e57cdfee5e6efc39eb.jpg

в планере 3.3 в отчете 1.2 V

 

 

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


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

37 минут назад, StewartLittle сказал:

На какой именно пин? Тактовые сигналы жедательно назначать на глобальные входы GCLK.

Пин G5

В документе GW1N-9 Pinout вроде как это GCLKC_7

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


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

Еще вопрос возник :

простенький проектик тестовый сделал :

module top( input clk, output [19:0]Q, output ck);
	reg [19:0]QP;
	always @(posedge clk) QP <= QP + 20'h00001;
	assign Q = QP;
	assign ck = ~clk;
endmodule

5.thumb.jpg.ea1669d5e122d1ead5534d20bd7a4c39.jpg

получил отчет :

6.thumb.jpg.115b3ec412511c6d151816227bbaaffe.jpg

Действительно можно на обычном I/O пине получить частоту 266 MHz LVCMOS33 ?

Никаких предупреждений касательно CK нет.

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


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

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

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

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

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

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

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

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

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

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