МАРСОХОД

Open Source Hardware Project

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

ТЕМА: Вопросы по языку Verilog

Re: Вопросы по языку Verilog 6 года 3 нед. назад #1917

  • Falcon
  • Falcon аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 31
  • Спасибо получено: 8
always @(posedge reset or posedge clk)
begin
if (reset)
a <= 0;
else
a <= a + 1'd1;
end
при reset постоянно = 0
этот код вырождается в этот
always @(posedge clk)
begin
a <= a + 1'd1;
end

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

Re: Вопросы по языку Verilog 6 года 3 дн. назад #1944

Доброе время суток,

подскажите пожалусто как сделать из большого сигнала маленький импульс:

имеется сигнал протеженностью 1us как сделать из этого сигнала импулс который непривышал бы 100ns?

Железо: Cyclone III
Чистота: 50 Mhz

За любую помощь буду весьма благодарен

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

Re: Вопросы по языку Verilog 6 года 3 дн. назад #1945

  • Falcon
  • Falcon аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 31
  • Спасибо получено: 8
У вас 50МГц а это 20ns вам надо всего 5 импульсов.
Делаете счетчик и вуаля.
module impuls_100_ns(
	input		CLK_50MHz,
	input		RESET,
	input		impuls_1us,
	output	reg	impuls_100ns
);

	reg [2:0] ct;
	
	always @(posedge RESET or posedge CLK_50MHz)
		if (RESET)
		begin
			ct <= 0;
			impuls_100ns <= 0;
		end
		else
			if (impuls_1us) 
			begin
				if (ct != 5)
				begin
					ct <= ct + 1'd1;
					impuls_100ns <= 1'd1;
				end
				else impuls_100ns <= 0;
			end
			else ct <= 0;

endmodule
Спасибо сказали: cyclone

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

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

Re: Вопросы по языку Verilog 6 года 2 дн. назад #1947

Спасибо, проверил , работает.

Но к сожалению у меня нету сигнала "reset", есть только "clk_50mhz" и "impuls_1us".

Я помню где то прочитал что "reset" нельзя запрограмировать так чтобы он реагировал на фронт, он всегда реагирует на состаяние т.е. пока сигнал активный никаких функций невыполняется, по крайней мере я не смог запрограмировать так чтобы он реагировал на фронт (в принципе я студент и не так хорошо разбераюсь в verilog), может быть это можно сделать но для меня это пока еще закрыто :(

За помощь буду очень благодарен

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

Re: Вопросы по языку Verilog 6 года 2 дн. назад #1948

  • Falcon
  • Falcon аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 31
  • Спасибо получено: 8
Reset это классика жанра он асинхронный нужен что бы установить схему в 0 состояние. Вне зависимости от входного клока.
Но можно и без него. Просто удалите его и все что с ним связанно.
Спасибо сказали: cyclone

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

Re: Вопросы по языку Verilog 5 года 11 мес. назад #1973

Доброе время суток,

помогите пожалусто с одной задачей над которой уже долгое время ломаю голову:

задача заключается в том что бы визуализировать 12 или 14 битные числа в децимальной форме на 7ми сегментных индикаторах или на LCD.

Т.е. после арихметического действия в сумме получается число которое достигает от 0 до 6000, а это около 13 бит и самая сложность для меня заключается в том чтобы из этих 12, 13 битный чисел сделать понятный рисунок для сегментных декодоров, т.е. конечная цель: высветится должно число в децимальной форме.

Как я понимаю здесь надо работать с декадами, но как мне разбить на пример число 1011 1011 1000 (3000 в децимале) на понятные для декодора декады или здесь надо как то по другому делать?

Буду очень благодарен.

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

Re: Вопросы по языку Verilog 5 года 11 мес. назад #1974

  • Falcon
  • Falcon аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 31
  • Спасибо получено: 8
Вам нужно преобразовать бинартые данные в двоично-десятичные.

Вырезка из моего кода
reg	[5:0]	ct_bit;	
reg	[3:0]	ct_cor;				
reg	[43:0]	bcd_data; // Результат преобразования 11 сегментов 44 = 11 * 4



if (DATA_READ) // Команда на чтение данных
begin
ct_bit <= 6'd37; // Число бит бинарных данных
bcd_data <= 44'd0;		
ct_cor <= 4'd0;		
end	
else		
if (ct_bit > 6'd0) bcd_conversion; 


task bcd_conversion;	// bin -> bcd
begin
if (ct_cor == 4'd0)
begin
ct_bit = ct_bit - 1'b1;
bcd_data <= {bcd_data[42:0], DATA_INPUT[ct_bit]}; // DATA_INPUT сами данные 
ct_cor <= 4'd11;
end
else
begin
if (bcd_data[3:0] > 3'd4)
bcd_data[3:0] = bcd_data[3:0] + 2'd3;		
bcd_data <= {bcd_data[3:0], bcd_data[43:4]};
ct_cor <= ct_cor - 1'b1;
end	
end
endtask
Спасибо сказали: cyclone

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

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

Re: Вопросы по языку Verilog 5 года 11 мес. назад #1980

Большое спасибо, не все понятно он постараюсь разобраться.

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

Re: Вопросы по языку Verilog 5 года 10 мес. назад #2009

Доброго времени суток нужна помощь в освоении языка:
Поясните если не сложно работу следующих логических вентилей :blush: :
nmos
pmos
cmos
rnmos
rpmos
rcmos
tran
tranif0
tranif1
rtran
rtranif0
rtranif1
pullup
pulldown

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

Re: Вопросы по языку Verilog 5 года 10 мес. назад #2066

Добрый день!
У меня просьба помочь. Есть тактируемый сигнал pwm. Он подается на делитель. В первом такте сигнала pwm, на выходе делителя a=1, b=0. На втором такте pwm на выходе делителя a=0, b=1 и так далее по очередности.
Программу написал так:

always @(posedge pwm)
delitel <= delitel + 1;

if (delitel == 1)
begin
a<=1 ;
b<=0;
end
else
begin
a<=0;
b<=0;
end

При компеляции выдается ошибка near text " if "; expecting "endmodule"
Что это за ошибка ? И правильно ли написал код ?
Заранее благодарен.

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

Время создания страницы: 0.201 секунд

ВКонтакте  facebook  GitHub  YouTube  Twitter