-
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
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
cyclone
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 5
-
Спасибо получено: 0
-
-
|
Доброе время суток,
подскажите пожалусто как сделать из большого сигнала маленький импульс:
имеется сигнал протеженностью 1us как сделать из этого сигнала импулс который непривышал бы 100ns?
Железо: Cyclone III
Чистота: 50 Mhz
За любую помощь буду весьма благодарен
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
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
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от Falcon.
|
-
cyclone
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 5
-
Спасибо получено: 0
-
-
|
Спасибо, проверил , работает.
Но к сожалению у меня нету сигнала "reset", есть только "clk_50mhz" и "impuls_1us".
Я помню где то прочитал что "reset" нельзя запрограмировать так чтобы он реагировал на фронт, он всегда реагирует на состаяние т.е. пока сигнал активный никаких функций невыполняется, по крайней мере я не смог запрограмировать так чтобы он реагировал на фронт (в принципе я студент и не так хорошо разбераюсь в verilog), может быть это можно сделать но для меня это пока еще закрыто :(
За помощь буду очень благодарен
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Falcon
-
-
Не в сети
-
Осваиваюсь на форуме
-
-
Сообщений: 31
-
Спасибо получено: 8
-
-
|
Reset это классика жанра он асинхронный нужен что бы установить схему в 0 состояние. Вне зависимости от входного клока.
Но можно и без него. Просто удалите его и все что с ним связанно.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
cyclone
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 5
-
Спасибо получено: 0
-
-
|
Доброе время суток,
помогите пожалусто с одной задачей над которой уже долгое время ломаю голову:
задача заключается в том что бы визуализировать 12 или 14 битные числа в децимальной форме на 7ми сегментных индикаторах или на LCD.
Т.е. после арихметического действия в сумме получается число которое достигает от 0 до 6000, а это около 13 бит и самая сложность для меня заключается в том чтобы из этих 12, 13 битный чисел сделать понятный рисунок для сегментных декодоров, т.е. конечная цель: высветится должно число в децимальной форме.
Как я понимаю здесь надо работать с декадами, но как мне разбить на пример число 1011 1011 1000 (3000 в децимале) на понятные для декодора декады или здесь надо как то по другому делать?
Буду очень благодарен.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
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
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от Falcon.
|
-
cyclone
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 5
-
Спасибо получено: 0
-
-
|
Большое спасибо, не все понятно он постараюсь разобраться.
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Павел Тупиков
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 3
-
Спасибо получено: 0
-
-
|
Доброго времени суток нужна помощь в освоении языка:
Поясните если не сложно работу следующих логических вентилей :blush: :
nmos
pmos
cmos
rnmos
rpmos
rcmos
tran
tranif0
tranif1
rtran
rtranif0
rtranif1
pullup
pulldown
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Игорь
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 4
-
Спасибо получено: 0
-
-
|
Добрый день!
У меня просьба помочь. Есть тактируемый сигнал 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.137 секунд