реклама на сайте
подробности

 
 
> Тернарный оператор VS конструкция if-else, Какова логика языка? Почему одно не заменяет другое?
flammmable
сообщение Jun 7 2018, 06:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 4-06-18
Пользователь №: 104 848



Предположим, есть конечный автомат, который в работе должен пробрасывать тактовую частоту через себя, а в состоянии IDLE установить выход тактовой частоты в единицу.

Тогда код может быть следующий:
Код
wire clk_in;
wire clk_out;
reg state;

assign clk_out = clk_in | ~(state^IDLE);

Т.е. если state и IDLE совпадают бит-в-бит, то их побитовый XOR будет равен нулю. Инвертированный ноль - это единица. Единица или clk_in - единица. В противном случае, ноль или clk_in - это clk_in.
Всё абсолютно прозрачно синтезируется.

Или код может быть такой:
Код
wire clk_in;
wire clk_out;
reg state;

assign clk_out = clk_in | (state == IDLE);//На месте синтезатора я заменил бы данную конструкцию на предыдущую


Или такой:
Код
wire clk_in;
wire clk_out;
reg state;

assign clk_out =(state == IDLE) ? 1 : clk_in;


Но почему не прокатывает следующий вариант?
Код
wire clk_in;
wire clk_out;
reg state;

always @(state)
begin
if(state == IDLE) begin
  clk_out = 1;
end
else begin
  clk_out = clk_in;
end
end

В таком варианте Квартус ругается на то, что "10137: Object on left-hand side of assignment must have a variable data type".

Не, ну нельзя, так - нельзя. Но эмм... в списке чувствительности отсутствуют posedge/negedge. В любом случае, синтезатор будет разворачивать эту конструкцию в комбинационную логику (причем, скорее всего в такую, как в первом примере). Так чего же он лезет на рожон (регистр ему подавай)? Какова логика языка? Почему так писать некорректно?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dima32rus
сообщение Jun 8 2018, 12:19
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 134
Регистрация: 9-11-12
Из: г. Брянск
Пользователь №: 74 311



Переделал модуль. Теперь счетчик, вынесенный из автомата, описывается в комбинационной части. Да, если так, то писанины стало меньше. С точки зрения реализации же, по-моему, оба счетчика абсолютно одинаковы.
Но теперь читается хуже. Счетчик, который в автомате, сразу виден в одном месте. А вот работа второго счетчика не так очевидна. Для этого надо смотреть на сам автомат, а также на логику, которая управляет счетчом. Причем каждый сигнал описывается отдельно.
CODE

module cnt_test
(
//Global
input CLK_i ,
input nRESET_i ,

//Input
input IN_PULSE_i ,

//Control
input ENA_CNT_i ,
input CLR_CNT_i ,

//Output of counter
output [31:0] OUT_CNT0_o32 ,
output [31:0] OUT_CNT1_o32
);

reg [31:0] out_cnt0_o32;
reg [31:0] out_cnt1_o32;
assign OUT_CNT0_o32 = out_cnt0_o32;
assign OUT_CNT1_o32 = out_cnt1_o32;

reg [7:0] state; //FSM
localparam integer sIDLE = 0,
sCOUNT = 1,
sSTOP = 2;

wire cnt_1_en = (state == sCOUNT) & ENA_CNT_i & IN_PULSE_i;
wire cnt_1_clr = (state == sSTOP) & CLR_CNT_i;

always @(posedge CLK_i or negedge nRESET_i)
begin
if(~nRESET_i)
begin
out_cnt0_o32 <= 0;
state <= sIDLE;
end
else
begin
case(state)

sIDLE:
begin
if(ENA_CNT_i)
state <= sCOUNT;
end

sCOUNT:
begin
if(ENA_CNT_i)
begin
if(IN_PULSE_i)
begin
out_cnt0_o32 <= out_cnt0_o32 + 1'b1;
end
end
else
begin
state <= sSTOP;
end
end

sSTOP:
begin
state <= sIDLE;
if(CLR_CNT_i)
begin
out_cnt0_o32 <= 0;
end
end

endcase
end

end

always @(posedge CLK_i or negedge nRESET_i)
begin
if(~nRESET_i)
begin
out_cnt1_o32 <= 0;
end
else
begin
if(cnt_1_en)
out_cnt1_o32 <= out_cnt1_o32 + 1'b1;
else if(cnt_1_clr)
out_cnt1_o32 <= 0;
end
end

endmodule

Если же делать так, чтобы счетчик считал только в одном конкретном состоянии автомата, тогда надо добавлять состояний. В одном счетчик тикает, в другом простаивает. Однако тогда между автоматом и счетчиком будет минимум логики. Особенно при кодировке One-Hot.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- flammmable   Тернарный оператор VS конструкция if-else   Jun 7 2018, 06:53
- - Flip-fl0p   Цитата(flammmable @ Jun 7 2018, 09:53) 1...   Jun 7 2018, 07:20
|- - iosifk   Цитата(Flip-fl0p @ Jun 7 2018, 10:20...   Jun 7 2018, 08:14
|- - flammmable   Цитата(Flip-fl0p @ Jun 7 2018, 10:20...   Jun 7 2018, 10:32
||- - iosifk   Цитата(flammmable @ Jun 7 2018, 13:32) Ко...   Jun 7 2018, 11:45
|||- - flammmable   Цитата(iosifk @ Jun 7 2018, 14:45) Для на...   Jun 7 2018, 12:26
||||- - iosifk   Цитата(flammmable @ Jun 7 2018, 15:26) Т....   Jun 7 2018, 12:30
||||- - flammmable   Цитата(iosifk @ Jun 7 2018, 15:30) Тогда ...   Jun 7 2018, 15:17
|||- - flammmable   Цитата(iosifk @ Jun 7 2018, 14:45) Если В...   Jun 13 2018, 08:31
|||- - iosifk   Цитата(flammmable @ Jun 13 2018, 11:31) к...   Jun 13 2018, 08:49
||- - RobFPGA   Приветсвую! Цитата(flammmable @ Jun 7 201...   Jun 7 2018, 12:16
||- - sazh   Цитата(flammmable @ Jun 7 2018, 13:32) 1....   Jun 7 2018, 19:20
|- - Viktuar   Цитата(iosifk @ Jun 7 2018, 09:14) Вот та...   Jun 7 2018, 17:27
|- - iosifk   Цитата(Viktuar @ Jun 7 2018, 20:27) Прост...   Jun 7 2018, 18:18
|- - RobFPGA   Приветствую! Цитата(iosifk @ Jun 7 2018,...   Jun 7 2018, 18:39
|- - Bad0512   Цитата(RobFPGA @ Jun 8 2018, 01:39) Приве...   Jun 8 2018, 02:18
||- - flammmable   Цитата(Bad0512 @ Jun 8 2018, 05:18) Думаю...   Jun 8 2018, 05:31
||- - Bad0512   Цитата(flammmable @ Jun 8 2018, 12:31) Бу...   Jun 8 2018, 06:58
|- - dima32rus   Цитата(RobFPGA @ Jun 7 2018, 21:39) Прост...   Jun 8 2018, 06:43
|- - RobFPGA   Приветствую! Цитата(dima32rus @ Jun 8 20...   Jun 8 2018, 08:35
- - RobFPGA   Приветсвую! Цитата(flammmable @ Jun 7 20...   Jun 7 2018, 08:05
- - andrew_b   Цитата(flammmable @ Jun 7 2018, 09:53) Пр...   Jun 7 2018, 08:22
- - Dantist2k17   ЦитатаНо почему не прокатывает следующий вариант? ...   Jun 7 2018, 11:30
- - lembrix   Цитата(flammmable @ Jun 7 2018, 13:32) Пр...   Jun 8 2018, 07:39
|- - Flip-fl0p   Цитата(lembrix @ Jun 8 2018, 10:39) Я бы...   Jun 8 2018, 07:43
- - dima32rus   Ну вот такой теоретический пример CODEmodule cnt_t...   Jun 8 2018, 10:20
|- - RobFPGA   Приветствую! Цитата(dima32rus @ Jun 8 201...   Jun 8 2018, 10:48
||- - dima32rus   Цитата(RobFPGA @ Jun 8 2018, 13:48) Вот о...   Jun 8 2018, 11:06
||- - Flip-fl0p   Цитата(dima32rus @ Jun 8 2018, 14:06) Сог...   Jun 8 2018, 11:26
|- - Flip-fl0p   Цитата(dima32rus @ Jun 8 2018, 13:20) Да...   Jun 8 2018, 10:50
|- - RobFPGA   Приветствую! Цитата(Flip-fl0p @ Jun...   Jun 8 2018, 11:30
|- - Flip-fl0p   Цитата(RobFPGA @ Jun 8 2018, 14:30) Экон...   Jun 8 2018, 11:39
|- - RobFPGA   Приветствую! Цитата(Flip-fl0p @ Jun ...   Jun 8 2018, 11:49
|- - Flip-fl0p   Цитата(RobFPGA @ Jun 8 2018, 14:49) .... ...   Jun 8 2018, 12:08


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016