вопросы по Verilog
Re: вопросы по Verilog
придется думать что-то гениальное....
потому что прошивка на AHDL влезает и работает)
потому что прошивка на AHDL влезает и работает)
-
Pe3ucTop
- Прорезались зубы
- Сообщения: 231
- Зарегистрирован: Пт ноя 16, 2007 13:52:44
- Откуда: Рига, Латвия
Re: вопросы по Verilog
Кажется вы не внимательны!
1) В исходном коде только один регистр ! IN_REG[15..0] , остальное всё логические действия !
2) Вы не разобрались как работать с портом ввода/вывода т.е. двунаправленным, и поэтому наверное код не работает..
Пример от Алтеры:
Тоесть читаем состояние порта когда ему присвоено состояние "Z"
В остальном, хорошо что двигаетесь вперёд..
1) В исходном коде только один регистр ! IN_REG[15..0] , остальное всё логические действия !
2) Вы не разобрались как работать с портом ввода/вывода т.е. двунаправленным, и поэтому наверное код не работает..
Пример от Алтеры:
Код: Выделить всё
module bidirec (oe, clk, inp, outp, bidir);
// Port Declaration
input oe;
input clk;
input [7:0] inp;
output [7:0] outp;
inout [7:0] bidir;
reg [7:0] a;
reg [7:0] b;
assign bidir = oe ? a : 8'bZ ;
assign outp = b;
// Always Construct
always @ (posedge clk)
begin
b <= bidir;
a <= inp;
end
endmodule
Тоесть читаем состояние порта когда ему присвоено состояние "Z"
В остальном, хорошо что двигаетесь вперёд..
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: вопросы по Verilog
Добрый день! Такая проблема. Есть код на Verilog, который, по идее, реализует машину состояний для инициализации динамической памяти. Проблема в том, что при компиляции в State Machine Viewer-е эта машина состояний просматривается как пустая. Соответственно, в железке ничего не срабатывает. Уменьшил код до такого:
Все равно, машина состояний остаётся пустой, регистр init_done_reg никогда не становится единицей, хотя ошибится тут трудно, вроде как. Уже бьюсь головой об стену. Что я делаю не так?
Спойлер
Код: Выделить всё
module MemInit (
//Тактирование
input wire mem_clk_133MHz,
input wire mem_clk_lock,
input wire nreset,
output wire init_done,
//output wire [2:0] init_cmd,
//output wire [21:0] init_adr,
input wire cmd_ack
);
/*****************************************************************/
//Описание состояний
localparam [3:0]
state_begin = 4'b0000,
state_loadreg1 = 4'b0001,
state_iwait = 4'b0010,
state_prech = 4'b0011,
state_prwait = 4'b0100,
state_fautor = 4'b0101,
state_fwait = 4'b0110,
state_sautor = 4'b0111,
state_swait = 4'b1000,
state_loadmr = 4'b1001,
state_loadreg2 = 4'b1010,
state_done = 4'b1111;
/*****************************************************************/
//регистры
reg [3:0] state = state_begin;
reg [3:0] next_state = state_begin;
reg init_done_reg = 0, next_init_done_reg;
reg [31:0] cycle_counter = 0;
reg [31:0] next_cycle_counter = 0;
assign init_done = init_done_reg;
/*****************************************************************/
//Тактирование
wire clk;
assign clk = mem_clk_133MHz & mem_clk_lock;
always @(posedge clk or negedge nreset) begin
if(!nreset) begin //Сброс
state <= state_begin;
init_done_reg <= 0;
end
else begin //Нормальная работа
state <= next_state;
init_done_reg <= next_init_done_reg;
cycle_counter <= next_cycle_counter;
end
end
/*****************************************************************/
//Машинка состояний
always @* begin
next_state = state;
next_init_done_reg = init_done_reg;
next_cycle_counter = cycle_counter + 32'b1;
case (state)
state_begin:
begin
next_cycle_counter = 0;
next_state = state_iwait;
end
state_iwait:
begin
if(cycle_counter >= 32'd133000) next_state = state_done;
end
state_done:
begin
next_init_done_reg = 1;
end
default:
begin
next_state = state_begin;
next_init_done_reg = 0;
end
endcase
end
endmoduleВсе равно, машина состояний остаётся пустой, регистр init_done_reg никогда не становится единицей, хотя ошибится тут трудно, вроде как. Уже бьюсь головой об стену. Что я делаю не так?
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
Re: вопросы по Verilog
Хочу освоить verilog
Создал программу счетчика
module q1 (led [29:0], clk);
input clk;
output reg [29:0]led;
always @(posedge clk)
begin
#100
led <= led + 1'd1;
end
endmodule
Почему задержка не срабатывает?
Создал программу счетчика
module q1 (led [29:0], clk);
input clk;
output reg [29:0]led;
always @(posedge clk)
begin
#100
led <= led + 1'd1;
end
endmodule
Почему задержка не срабатывает?
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: вопросы по Verilog
Pawel91 писал(а):Почему задержка не срабатывает?
Что значит, не срабатывает? Написанное вами значит, что между положительным фронтом clk и изменением значения регистра leds будет задержка 100 нс. Но частота изменений регистра leds будет определяться частотой тактирования clk. Вот вам картинка для пояснения:

(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
Re: вопросы по Verilog
Я так и предполагал, но симуляция в квартус выдает другое.
Задержка получается 6.819
(картинку загрузить не получилось((()
Задержка получается 6.819
(картинку загрузить не получилось((()
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: вопросы по Verilog
Не уверен что верилог сильно отличается, но в вхдл, задержка имеет смысл только в моделировании (например что бы задать смещение сигналов), а в синтезе (речь как я понял именно о синтезе) команда задержки не работает.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Re: вопросы по Verilog
Я вот как раз и делал моделирование
, modelsim пока не осилил, делал во встроенной в 13 квартусе системе моделирования(waveform editor), указал на конкретно временное моделирование, я вообще делаю лабы студентам, мне нужно полностью изучить этот язык, так как лабы будут на освоение этого языка. Вот хочу научиться как правильно писать задержки для модулей.
- РадиоЛоматель
- Мудрый кот
- Сообщения: 1733
- Зарегистрирован: Чт авг 21, 2008 22:03:30
- Откуда: Одесса(Украина)
- Контактная информация:
Re: вопросы по Verilog
Pawel91 писал(а):Я вот как раз и делал моделирование
А какой период у источника тактового сигнала? Может, ваша задержка кратна этому периоду?
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
Re: вопросы по Verilog
Период разный делал и 200 и 500 нс. Задержка одна и таже
Re: вопросы по Verilog
Здравствуйте! Помогите разобраться в конечных автоматах на верилоге для альтеры.
Что можно почитать? С чего начать?
Что можно почитать? С чего начать?
Re: вопросы по Verilog
Поддерживаю вопрос порекомендуйте пожалуйста русскоязычную литературу, раскрывающую синтаксис и семантику языка Verilog HDL, а то до сих пор не могу разобраться с функциями следующих команд
:
cmos
deassign
pmos
pull0
pull1
pullup
pulldown
rcmos
release
rnmos
rpmos
rtran
rtranif0
rtranif1
specparam
strength
strong
notif0
notif1
strong1
tran
tranif0
tranif1
small
medium
large
force
cmos
deassign
pmos
pull0
pull1
pullup
pulldown
rcmos
release
rnmos
rpmos
rtran
rtranif0
rtranif1
specparam
strength
strong
notif0
notif1
strong1
tran
tranif0
tranif1
small
medium
large
force
Re: вопросы по Verilog
Помогите с мелочью.
пишу строчку :
assign CLK1=CLK2;
у меня CLK1 бежит как надо, а CLK2 просто включается в единицу и все, как правильно будет написать?
пишу строчку :
assign CLK1=CLK2;
у меня CLK1 бежит как надо, а CLK2 просто включается в единицу и все, как правильно будет написать?
Re: вопросы по Verilog
Попробуйте
wire CLK1 = CLK2
wire CLK1 = CLK2
Re: вопросы по Verilog
так не работает,мне надо вход с выходом напрямую связать(
Re: вопросы по Verilog
Т.е создать обратную связь?
Re: вопросы по Verilog
Сделать перенаправление) Т.е есть альтерка, на одну ногу приходит одно, с другой ноги выходит тоже самое, в данном случае клок.
Re: вопросы по Verilog
попробуйте
assign CLK2=CLK1
assign CLK2=CLK1
Re: вопросы по Verilog
так тоже не прокатывает,делал уже)
Re: вопросы по Verilog
А какая частота ?