потому что прошивка на AHDL влезает и работает)
вопросы по Verilog
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
придется думать что-то гениальное....
потому что прошивка на AHDL влезает и работает)
потому что прошивка на AHDL влезает и работает)
- Реклама
Кажется вы не внимательны!
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
В остальном, хорошо что двигаетесь вперёд..
Добрый день! Такая проблема. Есть код на 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(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- Сообщения: 10
- Зарегистрирован: Вт окт 22, 2013 18:20:52
Хочу освоить 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
Почему задержка не срабатывает?
Что значит, не срабатывает? Написанное вами значит, что между положительным фронтом clk и изменением значения регистра leds будет задержка 100 нс. Но частота изменений регистра leds будет определяться частотой тактирования clk. Вот вам картинка для пояснения:Pawel91 писал(а):Почему задержка не срабатывает?

(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- Реклама
- Сообщения: 10
- Зарегистрирован: Вт окт 22, 2013 18:20:52
Я так и предполагал, но симуляция в квартус выдает другое.
Задержка получается 6.819
(картинку загрузить не получилось((()
Задержка получается 6.819
(картинку загрузить не получилось((()
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
Не уверен что верилог сильно отличается, но в вхдл, задержка имеет смысл только в моделировании (например что бы задать смещение сигналов), а в синтезе (речь как я понял именно о синтезе) команда задержки не работает.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Сообщения: 10
- Зарегистрирован: Вт окт 22, 2013 18:20:52
Я вот как раз и делал моделирование
, modelsim пока не осилил, делал во встроенной в 13 квартусе системе моделирования(waveform editor), указал на конкретно временное моделирование, я вообще делаю лабы студентам, мне нужно полностью изучить этот язык, так как лабы будут на освоение этого языка. Вот хочу научиться как правильно писать задержки для модулей.
А какой период у источника тактового сигнала? Может, ваша задержка кратна этому периоду?Pawel91 писал(а):Я вот как раз и делал моделирование
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Люблю Си...
- Сообщения: 10
- Зарегистрирован: Вт окт 22, 2013 18:20:52
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
Здравствуйте! Помогите разобраться в конечных автоматах на верилоге для альтеры.
Что можно почитать? С чего начать?
Что можно почитать? С чего начать?
- Сообщения: 10
- Зарегистрирован: Вт окт 22, 2013 18:20:52
Поддерживаю вопрос порекомендуйте пожалуйста русскоязычную литературу, раскрывающую синтаксис и семантику языка 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
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
Помогите с мелочью.
пишу строчку :
assign CLK1=CLK2;
у меня CLK1 бежит как надо, а CLK2 просто включается в единицу и все, как правильно будет написать?
пишу строчку :
assign CLK1=CLK2;
у меня CLK1 бежит как надо, а CLK2 просто включается в единицу и все, как правильно будет написать?
- Сообщения: 10
- Зарегистрирован: Вт окт 22, 2013 18:20:52
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
- Сообщения: 10
- Зарегистрирован: Вт окт 22, 2013 18:20:52
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
Сделать перенаправление) Т.е есть альтерка, на одну ногу приходит одно, с другой ноги выходит тоже самое, в данном случае клок.
- Сообщения: 10
- Зарегистрирован: Вт окт 22, 2013 18:20:52
- Сообщения: 426
- Зарегистрирован: Чт авг 09, 2012 08:57:20
- Сообщения: 10
- Зарегистрирован: Вт окт 22, 2013 18:20:52


