Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА: EPM240T100C5 не работает RAM память

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6303

  • dimo41
  • dimo41 аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
Добрый день, не подскажете пожалуйста как считать данные из памяти RAM (EPM240T100C5 ufm_block)
module dds_generator(clk,signal_output);
input wire clk;
output wire [7:0] signal_output;
reg [31:0] phase_acumulator;
initial phase_acumulator = 32'd0;
//assign signal_output = ~phase_acumulator[31:24];
 ram_1port sin(
   .address(phase_acumulator[31:24]),
   .data(),
   .outclock(clk),
   .we(1'b0),
   .q(signal_output));
always@(posedge clk ) begin
 phase_acumulator <= phase_acumulator + 32'd85899346;
end
 endmodule
вроде как скомпилировалась а вот так что чудна

RTL схема

вроде бы правильно а вот warning

пишет что output приведён на gnd и нету clk в проекте
Warning (332068): No clocks defined in design.
почему ето так немогу понять

Вложения:

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

Последнее редактирование: от dimo41.

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6306

1. Компилятор выбросил всю логику, скорее всего не нашел ваш "sin"
2. "ufm_block" это не "RAM" а "ROM", и как им пользоваться здесь - www.altera.com/en_US/pdfs/literature/an/an489.pdf
и про мегафункцию - www.altera.com/en_US/pdfs/literature/ug/ug_alt_ufm.pdf

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

Последнее редактирование: от umarsohod.

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6307

  • dimo41
  • dimo41 аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
а так тогда я могу использовать только эти функции



а я думал что если есть RAM в megafunction так её можно использовать
Вложения:

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

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6308

" RAM " можно сделать, но только на логических эелментах, а их в чипе только 240.
Ставьте "ALTUFM_NONE", разбирайтесь, как с нее читать. Записать в нее синус можно программатором.

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

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6309

Эх вспоминаю себя в роли слепого котенка, была бы в epm240 RAM, о это было бы интересно...
Есть небольшой код для генератора синусоидального сигнала вдруг понадобится,
// генератор трехфазного синусоидального сигнала со смещением фаз относительно друг друга

module phase_gen (

input wire clk,
input wire sine_clk,
input wire amp_en,
input wire [2:0]amp,
output reg [2:0]phase
);

reg [7:0]pwm_count;		 //счетчик ШИМ
reg [6:0]sine_code;		 //перебирает значения таблицы синуса
reg [4:0]count_mod;		 //содержит порядковый номер точки
reg [7:0]quarter_sine;	 //содержит текущее значение четверти из таблицы синуса
reg [7:0]sine; 			 //содержит текущее значение синуса
reg [6:0]sine_count;	 //счетчик точек синуса
reg [1:0]phase_count;	 //счетчик фаз
reg [2:0]amplitude;
reg [7:0]sine_out;


always @*
begin
	case(count_mod)		 // таблица четверти волны 
5'd0:	quarter_sine=8'd131;
5'd1:	quarter_sine=8'd134;	
5'd2:	quarter_sine=8'd146;
5'd3:	quarter_sine=8'd152;
5'd4:	quarter_sine=8'd158;
5'd5:	quarter_sine=8'd165;
5'd6:	quarter_sine=8'd170;
5'd7:	quarter_sine=8'd176;
5'd8:	quarter_sine=8'd180;
5'd9:	quarter_sine=8'd188;
5'd10:	quarter_sine=8'd193;
5'd11:	quarter_sine=8'd198;
5'd12:	quarter_sine=8'd203;
5'd13:	quarter_sine=8'd208;
5'd14:	quarter_sine=8'd213;
5'd15:	quarter_sine=8'd218;
5'd16:	quarter_sine=8'd222;
5'd17:	quarter_sine=8'd226;
5'd18:	quarter_sine=8'd230;
5'd19:	quarter_sine=8'd234;
5'd20:	quarter_sine=8'd237;
5'd21:	quarter_sine=8'd240;
5'd22:	quarter_sine=8'd243;
5'd23:	quarter_sine=8'd245;
5'd24:	quarter_sine=8'd248;
5'd25:	quarter_sine=8'd250;
5'd26:	quarter_sine=8'd251;
5'd27:	quarter_sine=8'd253;
5'd28:	quarter_sine=8'd254;
5'd29:	quarter_sine=8'd254;
5'd30:	quarter_sine=8'd255;
5'd31:	quarter_sine=8'd255;
	endcase
	case(sine_code[6]) // формирует нижнюю полуволну синуса
0:	sine=quarter_sine;
1:	sine=(8'd255 - quarter_sine);
	endcase
	case(sine_code[5])// инвертирует значение счетчика синуса при нечетной четверти
0:	count_mod=sine_code[4:0];
1:	count_mod=~sine_code[4:0];
	endcase
	case(phase_count) // разводит фазы на нужный градус
0:	sine_code=sine_count;
1:	sine_code=sine_count + 7'd43;	//~120
2:	sine_code=sine_count + 7'd85;	//~240
3:	sine_code=sine_count;
	endcase

end
always @(posedge clk)
begin
	if(amp_en)
	begin
	amplitude<=amp;
	end
	case(amplitude)
0:	sine_out<=sine>>3;
1:	sine_out<=sine>>2;
2:	sine_out<=(sine>>2)+(sine>>3);
3:	sine_out<=sine>>1;
4:	sine_out<=(sine>>1)+(sine>>3);
5: 	sine_out<=(sine>>1)+(sine>>2);
6:	sine_out<=(sine>>1)+(sine>>2)+(sine>>3);
7:	sine_out<=sine;
	endcase
	pwm_count <= pwm_count + 1; // инкрементируем счетчик ШИМ 
	if(phase_count < 2)	// ограничиваем счетчик фаз тремя положениями 0,1,2
	phase_count <= phase_count + 1;
	else
	phase_count <= 0; 
	if(phase_count == 2'd0)// расчет ШИМ для фазы №1
	begin
		if(pwm_count <= sine_out)
		phase[0] <= 1;
		else
		phase[0] <= 0;
	end
	if(phase_count == 2'd1)// расчет ШИМ для фазы №2
	begin
		if(pwm_count <= sine_out)
		phase[1] <= 1;
		else
		phase[1] <= 0;
	end
	if(phase_count == 2'd2)// расчет ШИМ для фазы №3
	begin
		if(pwm_count <= sine_out)
		phase[2] <= 1;
		else
		phase[2] <= 0;
	end
end
always @(posedge sine_clk)
begin
sine_count <= sine_count + 1; // инкрементируем счетчик точек синуса по внешнему тактовому сигналу.
end
	
endmodule	

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

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6310

  • dimo41
  • dimo41 аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
большое спасибо вам я просто только начал учиться и меня это увлекло , захотел построить простой генератор спасибо буду дальше читать и разбираться ;)

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

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6410

  • dimo41
  • dimo41 аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
всё разобрался написал програмmу для матричной клавиатуры и четырехместного дисплея. Поставил и вот такой DAC

заработало но кoгда начал печатную плату рисовать пришло в голову что хотелось бы и амплитуду регулировать, решил сделать по другому DAC

так как можно менять значение Ur, но тут надо входы переключать первое что в голову пришло поставить транзисторы PNP и NPN, но может быть можно сделать ето элегантней и обойтись без них?
Вложения:

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

Последнее редактирование: от dimo41.

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6414

Используйте лучше это решение, DAC на резисторах это прошлый век.
на выходе вам нужен один резистор и керамический конденсатор - фильтр высокой частоты.
Прекрасно можно обойтись и без оу во многих случаях. а в некоторых и без резистора в фильтре.
module dac(DACout, clk, DACin);
output DACout; // This is the average output that feeds low pass filter
reg DACout; // for optimum performance, ensure that this ff is in IOB
input clk;
input [6:0]DACin;


reg [8:0] DeltaAdder; // Output of Delta adder
reg [8:0] SigmaAdder; // Output of Sigma adder
reg [8:0] SigmaLatch; // Latches output of Sigma adder
reg [8:0] DeltaB; // B input of Delta adder

always @(SigmaLatch) DeltaB = {SigmaLatch[8], SigmaLatch[8]} << (7);
always @(DACin or DeltaB) DeltaAdder = DACin + DeltaB;
always @(DeltaAdder or SigmaLatch) SigmaAdder = DeltaAdder + SigmaLatch;
always @(posedge clk)
begin
SigmaLatch <= SigmaAdder;
DACout <=  SigmaLatch[8];
end
endmodule

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

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6415

Много зависит от правильной постановки задачи. Для какой цели нужен этот DAC ?

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

EPM240T100C5 не работает RAM память 8 года 3 мес. назад #6419

  • dimo41
  • dimo41 аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
делаю себе генератор до 25-30 Мгц ( синус, пила , прямоугольный сигнал ) и думаю что сигма дельта цап не подойдёт насколько он для низких частот потому выбрал R-2R он должен хорошо справится.
попробую вот так может глупость но я думаю что может заработать :)
module dds_gen (clk,signal_output,signal_input,gnd);
input wire clk; // 50Mhz
input wire [7:0] signal_input;
output wire [7:0] signal_output;
output wire [7:0]  gnd;
reg [31:0] phase_acumulator;
initial phase_acumulator = 32'd0;
//----------------------------------------------------------------------------------------------------------
always@(posedge clk ) begin
 phase_acumulator <= phase_acumulator + 32'd8590; // 100khz 
end
//---------------------------------------------------------------------------------------------------------
bufif0 bufif0_0 (gnd[0],signal_input[0],phase_acumulator[24]);
bufif0 bufif0_1 (gnd[1],signal_input[1],phase_acumulator[25]);
bufif0 bufif0_2 (gnd[2],signal_input[2],phase_acumulator[26]);
bufif0 bufif0_3 (gnd[3],signal_input[3],phase_acumulator[27]);
bufif0 bufif0_4 (gnd[4],signal_input[4],phase_acumulator[28]);
bufif0 bufif0_5 (gnd[5],signal_input[5],phase_acumulator[29]);
bufif0 bufif0_6 (gnd[6],signal_input[6],phase_acumulator[30]);
bufif0 bufif0_7 (gnd[7],signal_input[7],phase_acumulator[31]);
//----------------------------------------------------------------------------------------------------------
bufif1 bufif1_0 (signal_output[0],signal_input[0],phase_acumulator[24]);
bufif1 bufif1_1 (signal_output[1],signal_input[1],phase_acumulator[25]);
bufif1 bufif1_2 (signal_output[2],signal_input[2],phase_acumulator[26]);
bufif1 bufif1_3 (signal_output[3],signal_input[3],phase_acumulator[27]);
bufif1 bufif1_4 (signal_output[4],signal_input[4],phase_acumulator[28]);
bufif1 bufif1_5 (signal_output[5],signal_input[5],phase_acumulator[29]);
bufif1 bufif1_6 (signal_output[6],signal_input[6],phase_acumulator[30]);
bufif1 bufif1_7 (signal_output[7],signal_input[7],phase_acumulator[31]);
 endmodule




signal_input ето если держаться моего рисунка выше то pn , pn-1,pn-2 ..... p1
signal_out берём все 8 провода и подключаем на инвертирующий вход оу
gnd на землю.

по идеи должен увидеть пилу
завтра попробую :)
Вложения:

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

Последнее редактирование: от dimo41.
  • Страница:
  • 1
  • 2
Время создания страницы: 0.380 секунд
Работает на Kunena форум