Jump to content
    

arctg() на VHDL/AHDL ?

Вот недавно выкладывал

Спасибо за Ваш ответ. Но, поправьте меня, если я ошибаюсьт, разве cordic_light написан не для вычисления значения cos и sin? При тестирование у меня все значения фазы нулями забиты рис 1. И еще вопросик, я так понимаю, что эту часть кода можно безболезненно удалить (с ним симулятор ругается на отсутсвующее устройство)?

 altsyncram# 
(
	.address_reg_b						( "CLOCK1" ),
	.clock_enable_input_a				( "NORMAL" ),
	.clock_enable_input_b				( "NORMAL" ),				
	.clock_enable_output_a				( "NORMAL" ),
	.clock_enable_output_b				( "NORMAL" ),
	.indata_reg_b						( "CLOCK1" ),
	.intended_device_family				( "Cyclone V" ),
	.lpm_type							( "altsyncram" ),
	.numwords_a							( 32 ),
	.numwords_b							( 32 ),
	.operation_mode						( "ROM" ),
	.outdata_aclr_a						( "NONE" ),
	.outdata_aclr_b						( "NONE" ),
	.outdata_reg_a						( "CLOCK0" ),
	.outdata_reg_b						( "CLOCK1" ),
	.power_up_uninitialized				( "FALSE" ),
	.ram_block_type						( "M10K" ),
	.init_file							( "cordic32.mif" ),
	.read_during_write_mode_port_a		( "NEW_DATA_NO_NBE_READ" ),
	.read_during_write_mode_port_b		( "NEW_DATA_NO_NBE_READ" ),
	.widthad_a							( 5 ),
	.widthad_b							( 5 ),
	.width_a							( 32 ),
	.width_b							( 32 ),
	.width_byteena_a					( 1 ),
	.width_byteena_b					( 1 ),
	.wrcontrol_wraddress_reg_b			( "CLOCK1" )
)
rom__ 
(
	.address_a 							( rom__address ),
	.address_b 							(  ),
	.clock0 							( rom__clock ),
	.clock1 							(  ),
	.clocken0 							( rom__enable ),
	.clocken1 							(  ),
	.data_a 							(  ),
	.data_b 							(  ),
	.wren_a 							( 1'b0 ),
	.wren_b 							( 1'b0 ),
	.q_a 								( rom__data ),
	.q_b 								(  ),
	.aclr0 								( 1'b0 ),
	.aclr1 								( 1'b0 ),
	.addressstall_a 					( 1'b0 ),
	.addressstall_b 					( 1'b0 ),
	.byteena_a 							( 1'b1 ),
	.byteena_b 							( 1'b1 ),
	.clocken2 							( 1'b1 ),
	.clocken3 							( 1'b1 ),
	.eccstatus 							(  ),
	.rden_a 							( 1'b1 ),
	.rden_b 							( 1'b1 )
);

endmodule

?

Вот прилагаю результат симляции

WAVE-ка

Рис 1

Edited by Nemoji

Share this post


Link to post
Share on other sites

Спасибо за Ваш ответ. Но, поправьте меня, если я ошибаюсьт, разве cordic_light написан не для вычисления значения cos и sin? При тестирование у меня все значения фазы нулями забиты рис 1. И еще вопросик, я так понимаю, что эту часть кода можно безболезненно удалить (с ним симулятор ругается на отсутсвующее устройство)?

Эта версия кордика считает именно арктангенс и амплитуду. Эта часть - это таблица углов для итераций кордика, её удалять нельзя. Вы можете её заменить, если у вас Xilinx, на соответствующую память. Файл mif легко смотрится в блакноте. Если у вас Altera, то вам в симулятор нужно скомпилировать соответствующие библиотеки из папки с квартусом и всё будет работать.

Edited by serjj

Share this post


Link to post
Share on other sites

Эта версия кордика считает именно арктангенс и амплитуду. Эта часть - это таблица углов для итераций кордика, её удалять нельзя. Вы можете её заменить, если у вас Xilinx, на соответствующую память. Файл mif легко смотрится в блакноте. Если у вас Altera, то вам в симулятор нужно скомпилировать соответствующие библиотеки из папки с квартусом и всё будет работать.

Файл mif я вскрыл. У меня Altera (сама ПЛИСС, если быть точнее, еще в пути), купил, решил разбираться на ходу, вот пытаюсь собрать измеритель фаз. Ошибка была : Error: (vsim-3033) C:/cord/cordic_5_0/cordic_base.sv(229): Instantiation of 'altsyncram' failed. The design unit was not found. Поковырялся в файлах квартуса altsyncram.v, добавил, скомпилировал, симуляция прошла :08: . Но увы, на выходе фаза так и не появилась, как и в предыдущем случае ophase имеет вид xxxxxxxxx и постоянно выскакикает прерывание. Возможно, я что-то недопонимаю (все таки всего пару недель с этим дело имею), но все равно спасибо Вам за отклик, буду пытаться что-то найти! =)

Edited by Nemoji

Share this post


Link to post
Share on other sites

Файл mif я вскрыл. У меня Altera (сама ПЛИСС, если быть точнее, еще в пути), купил, решил разбираться на ходу, вот пытаюсь собрать измеритель фаз. Ошибка была : Error: (vsim-3033) C:/cord/cordic_5_0/cordic_base.sv(229): Instantiation of 'altsyncram' failed. The design unit was not found. Поковырялся в файлах квартуса altsyncram.v, добавил, скомпилировал, симуляция прошла 08.gif . Но увы, на выходе фаза так и не появилась, как и в предыдущем случае ophase имеет вид xxxxxxxxx и постоянно выскакикает прерывание. Возможно, я что-то недопонимаю (все таки всего пару недель с этим дело имею), но все равно спасибо Вам за отклик, буду пытаться что-то найти! =)

 

Вы мой тестбенч запускали? Вам нужно не файл добавлять, а скомпилировать альтеровские либы в ваш modelsim/questasim. Вот эта ссылка может помочь. Я добавляю библиотеки: altera_mf, cyclonev, lpm, sgate и больше об них не парюсь. Поищите по форуму, про это писано очень много. Также вы можете заменить ROM в исходниках на неявно описанную память, используя темплейты квартуса для верилога, там пример есть. Я писал под конкретный проект, было проще описывать память явно.

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.

×
×
  • Create New...