Страница 3 из 4

Re: вопросы по Verilog

Добавлено: Пт фев 01, 2013 17:50:31
Nevox
придется думать что-то гениальное....
потому что прошивка на AHDL влезает и работает)

Re: вопросы по Verilog

Добавлено: Пт фев 01, 2013 19:10:00
Pe3ucTop
Кажется вы не внимательны!
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"

В остальном, хорошо что двигаетесь вперёд..

Re: вопросы по Verilog

Добавлено: Чт авг 22, 2013 22:59:01
РадиоЛоматель
Добрый день! Такая проблема. Есть код на Verilog, который, по идее, реализует машину состояний для инициализации динамической памяти. Проблема в том, что при компиляции в State Machine Viewer-е эта машина состояний просматривается как пустая. Соответственно, в железке ничего не срабатывает. Уменьшил код до такого:
Спойлер

Код: Выделить всё

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 никогда не становится единицей, хотя ошибится тут трудно, вроде как. Уже бьюсь головой об стену. Что я делаю не так?

Re: вопросы по Verilog

Добавлено: Вт окт 22, 2013 18:42:43
Pawel91
Хочу освоить 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

Почему задержка не срабатывает?

Re: вопросы по Verilog

Добавлено: Вт окт 22, 2013 20:37:51
РадиоЛоматель
Pawel91 писал(а):Почему задержка не срабатывает?
Что значит, не срабатывает? Написанное вами значит, что между положительным фронтом clk и изменением значения регистра leds будет задержка 100 нс. Но частота изменений регистра leds будет определяться частотой тактирования clk. Вот вам картинка для пояснения:

Изображение

Re: вопросы по Verilog

Добавлено: Ср окт 23, 2013 11:25:13
Pawel91
Я так и предполагал, но симуляция в квартус выдает другое.
Задержка получается 6.819
(картинку загрузить не получилось((()

Re: вопросы по Verilog

Добавлено: Ср окт 23, 2013 19:20:08
Meteor
Не уверен что верилог сильно отличается, но в вхдл, задержка имеет смысл только в моделировании (например что бы задать смещение сигналов), а в синтезе (речь как я понял именно о синтезе) команда задержки не работает.

Re: вопросы по Verilog

Добавлено: Ср окт 23, 2013 19:28:33
Pawel91
Я вот как раз и делал моделирование :( , modelsim пока не осилил, делал во встроенной в 13 квартусе системе моделирования(waveform editor), указал на конкретно временное моделирование, я вообще делаю лабы студентам, мне нужно полностью изучить этот язык, так как лабы будут на освоение этого языка. Вот хочу научиться как правильно писать задержки для модулей.

Re: вопросы по Verilog

Добавлено: Ср окт 23, 2013 22:50:37
РадиоЛоматель
Pawel91 писал(а):Я вот как раз и делал моделирование
А какой период у источника тактового сигнала? Может, ваша задержка кратна этому периоду?

Re: вопросы по Verilog

Добавлено: Чт окт 24, 2013 06:02:40
Pawel91
Период разный делал и 200 и 500 нс. Задержка одна и таже

Re: вопросы по Verilog

Добавлено: Пт окт 25, 2013 08:31:33
Nevox
Здравствуйте! Помогите разобраться в конечных автоматах на верилоге для альтеры.

Что можно почитать? С чего начать?

Re: вопросы по Verilog

Добавлено: Пт окт 25, 2013 22:05:29
Pawel91
Поддерживаю вопрос порекомендуйте пожалуйста русскоязычную литературу, раскрывающую синтаксис и семантику языка 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

Re: вопросы по Verilog

Добавлено: Пт ноя 01, 2013 14:20:30
Nevox
Помогите с мелочью.

пишу строчку :

assign CLK1=CLK2;

у меня CLK1 бежит как надо, а CLK2 просто включается в единицу и все, как правильно будет написать?

Re: вопросы по Verilog

Добавлено: Пт ноя 01, 2013 14:22:19
Pawel91
Попробуйте
wire CLK1 = CLK2

Re: вопросы по Verilog

Добавлено: Пт ноя 01, 2013 14:53:13
Nevox
так не работает,мне надо вход с выходом напрямую связать(

Re: вопросы по Verilog

Добавлено: Пт ноя 01, 2013 14:55:32
Pawel91
Т.е создать обратную связь?

Re: вопросы по Verilog

Добавлено: Пт ноя 01, 2013 15:12:42
Nevox
Сделать перенаправление) Т.е есть альтерка, на одну ногу приходит одно, с другой ноги выходит тоже самое, в данном случае клок.

Re: вопросы по Verilog

Добавлено: Пт ноя 01, 2013 15:20:51
Pawel91
попробуйте
assign CLK2=CLK1 :)

Re: вопросы по Verilog

Добавлено: Пт ноя 01, 2013 15:28:31
Nevox
так тоже не прокатывает,делал уже)

Re: вопросы по Verilog

Добавлено: Пт ноя 01, 2013 15:37:03
Pawel91
А какая частота ?