Снова, здравствуйте.
module half_freq (freq_in, freq_out);
input wire freq_in;
output wire freq_out;
reg [1:0] state;
always @(posedge freq_in)
begin
state = state + 2'b01;
if (state == 2'b10)
begin
state <= 2'b00;
freq_out <= ~freq_out;
end
end
endmodule
Вроде, все правильно, но ругается:
Error (10137): Verilog HDL Procedural Assignment error at LED_blink.v(50): object "freq_out" on left-hand side of assignment must have a variable data type
Вроде, все логично описано:
На переднем фронте:
1. Добавляем счетчик
2. Смотрим счетчик, если он два, то сбрасываем его и инвертируем выход.
Чувствую, что нет понимания с типами, но не ухватываю какого.
Даже стыдно немного, учитывая, что их всего - ДВА! wire и reg (Как я понял, reg - это внутренние переменные, которые наружу не торчат, а wire - торчат из модуля). По разрядности, вроде, все сходится. Почему она считает, что freq_out - не переменная? Если я ее должен менять! Этож, самая важная часть.
Какую-то мелочь не ухватываю.
Заранее спасибо. :blush:
UPD
И еще не понимаю, как задать начальное значение "state" равным нулю? Этого я так и не постиг.