-
leonem
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 12
-
Спасибо получено: 0
-
-
|
Хотел спросить насчет сдвигового регистра я взял на сайте альтеры пример но он что то не заработал
www.altera.com/support/examples/verilog/verilog.html
www.altera.com/support/examples/verilog/ver-1x64-shift-reg.html
module shift_1x64 (clk,
shift,
sr_in,
sr_out,
);
input clk, shift;
input sr_in;
output sr_out;
reg [63:0] sr;
always@(posedge clk)
begin
if (shift == 1'b1)
begin
sr[63:1] <= sr[62:0];
sr[0] <= sr_in;
end
end
assign sr_out = sr[63];
endmodule
Тут есть какие то тонкости он не заполняет данными регистр и не передает данные на вывод и данные он должен выводить сразу как они обновились или в конце когда полностью заполнен регистр [63:0] sr;
Пример простой но почемуто не работает. Хотя что то похожее видел в примерах у других.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
alman
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 263
-
Спасибо получено: 41
-
-
-
-
-
|
Вход shift должен быть установлен в 1 чтобы регистр заработал.
Перые 64 такта на выходе будут нули, а скорее всего "мусор", поскольку не используется сигнала сброса, который установит все биты сдвигового регистра в 0.
К сожалению я новичок в Verilog, т.ч. если ошибусь, надеюсь, меня поправят. На выходе всегда значение бита 63 сдвигового регистра. Обновлются данные по тактовому импульсу clk. Разумеется, если вход shift установлен в 0, то данные обновляться не будут, как и не будет обновляться сдвиговый регистр.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
leonem
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 12
-
Спасибо получено: 0
-
-
|
Тест бэнч я написал на shift 1 подал и регистр обнулил подал первые 8 бит 0. Правда регистр уменьшил до 31 и данные подал 1раз на 31бит программа проверки gtkwave показала все Х в регистре
но данные не были записаны в регистр. Вы считаете данные надо подовать по кругу и за второй проход они запишутся. "На выходе всегда значение бита 63 сдвигового регистра"- Это означает что данные будут
выведены разом в этот регистр или с каждым тактом будет происходить заполнение? Но разом это наверно не возможно.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
kraftig
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 2
-
Спасибо получено: 0
-
-
|
всем привет!
парни, подскажите по работе одного куска кода, сижу час не могу понять в чем дело.
always@(posedge clk)
begin
if(counter<=width)
out <=1'b1;
else
out <=1'b0;
counter<=counter+1'd1;
if(counter>=18'd195312)
counter=18'b0;
$display("%d",counter[17:0]);
end
как только counter досчитывает до 195312, я хочу его сбросить в 0. причем в 0 он сбрасывается.
но при новом клоке CLK, counter считается дальше))) бррр, как так-то? может знатоки подскажут, почему и что с этим делать? спасибо)
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
alman
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 263
-
Спасибо получено: 41
-
-
-
-
-
|
Скорее всего причина в том, что Вы смешали блокирующее и неблокирующее присваивания регистра counter
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от alman.
|
-
kraftig
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 2
-
Спасибо получено: 0
-
-
|
точно, нигде такого не встречал, но буду иметь это в виду, спасибо))
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
Серый Волк
-
-
Не в сети
-
Давно я тут
-
-
Сообщений: 82
-
Спасибо получено: 2
-
-
-
|
Подскажите - перерыл все мегафункции в Quartus'е, так и не нашёл реализацию SPI, мне необходимо на EPM3000 или EPM240.
Спасибо.
"Холодает" - подумал Волк и натянул Красную Шапочку по самые уши...
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
alman
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 263
-
Спасибо получено: 41
-
-
-
-
-
|
kraftig пишет: точно, нигде такого не встречал, но буду иметь это в виду, спасибо))
Ещё смущает вот такой код:
if(counter<=width)
Честно говоря, не настолько хорошо знаю Верилог, но на всякий случай поменял бы на
if(width > counter)
конструкция <= в условии смущает.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
-
wss60
-
-
Не в сети
-
Новый участник
-
-
Сообщений: 1
-
Спасибо получено: 0
-
-
|
привет всем!
не получается простой счетчик: во время переключения счетчика он переходит в неопределенное состояние!?
В компиляторе и симуляторе не одного предупреждения!
module ram_counter
(
input wire clk,
output reg[15:0] ram_addr
);
always @(posedge clk) begin
ram_addr <= ram_addr + 16'b0000000000000001;
end
endmodule
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Последнее редактирование: от wss60.
|
-
Alucard
-
-
Не в сети
-
Завсегдатай
-
-
Сообщений: 208
-
Спасибо получено: 20
-
-
-
-
|
wss60 пишет: привет всем!
не получается простой счетчик: во время переключения счетчика он переходит в неопределенное состояние!?
В компиляторе и симуляторе не одного предупреждения!
module ram_counter
(
input wire clk,
output reg[15:0] ram_addr
);
always @(posedge clk) begin
ram_addr <= ram_addr + 16'b0000000000000001;
end
endmodule
Да у вас все идеально сделано. У меня часто такая чепухня присутствовала при симуляции: задержек между ячейками не избежать, но на реальном железе такой выброс не существенен, возможно он даже до выхода не дойдет.
|
|
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
|
Время создания страницы: 0.963 секунд