Bug #4997
closedНеправильно работают конструкции: replication, concatenation
0%
Description
Возникают следующие проблемы при трансляции из Verilog в Verilog
1)Concatenation:
Вход: a = {b,c};
Выход: a = b;
Ожидаемый выход: a = {b,c};
2)Replication:
Вход: a = {2{b}};
Выход: a = (2{b});
Ожидаемый выход: a = {2{b}};
Вход: a = {b, 2{c}};
Выход: программа падает.
Ожидаемый выход: a = {b, 2{c}};
Вход: a = {2{b}, c};
Выход: программа падает.
Ожидаемый выход: a = {2{b}, c};
Вход: a = {2{b}, 2{c}};
Выход: программа падает.
Ожидаемый выход: a = {2{b}, 2{c}};
Updated by Павел Шестаков over 10 years ago
- Priority changed from Immediate to Normal
Updated by Sergey Smolov over 10 years ago
Павел, необходимо уточнить, какая именно программа падает и с какой именно ошибкой. А также способ запуска этой программы.
Без этих данных понять, что именно не работает, затруднительно.
Updated by Alexander Kamkin over 10 years ago
Сережа, я понял, что имеется в виду. Выйду из отпуска, исправлю.
Updated by Alexander Kamkin over 10 years ago
- Subject changed from В проекте Retrascope неправильно работают конструкции: replication, concatenation, repeat to [verilog][translator] В проекте Retrascope неправильно работают конструкции: replication, concatenation, repeat
Updated by Alexander Kamkin over 10 years ago
- Subject changed from [verilog][translator] В проекте Retrascope неправильно работают конструкции: replication, concatenation, repeat to [verilog][translator][ast] В проекте Retrascope неправильно работают конструкции: replication, concatenation, repeat
Updated by Alexander Kamkin over 10 years ago
- Project changed from Retrascope to Verilog Translator
- Subject changed from [verilog][translator][ast] В проекте Retrascope неправильно работают конструкции: replication, concatenation, repeat to Неправильно работают конструкции: replication, concatenation
- Target version deleted (
0.1)
Updated by Alexander Kamkin over 10 years ago
Ошибка 2.1 - это помарка в принтере. Исправлено:
public void onExprBegin(NodeExpr expr) {
final Enum<?> op = expr.getOperationId();
if (op == Expression.Type.FUNCTION_CALL) {
final Expression expression = (Expression) expr.getUserData();
buffer.append(expression.getPath());
}
final boolean curly =
(op == StandardOperation.BVCONCAT)
|| (op == StandardOperation.BVREPEAT);
buffer.append(curly ? "{" : "(");
}
public void onExprEnd(NodeExpr expr) {
final Enum<?> op = expr.getOperationId();
final boolean curly =
(op == StandardOperation.BVCONCAT)
|| (op == StandardOperation.BVREPEAT);
buffer.append(curly ? "}" : ")");
}
Updated by Alexander Kamkin over 10 years ago
Ошибки 2.2-2.4 некорректны, ибо входные данные не соответствуют синтаксису Verilog (см. стандарт): вместо 2{x}
нужно писать {2{x}}
.
Updated by Alexander Kamkin over 10 years ago
- Status changed from Open to Resolved
- Published in build set to r323
Ошибка 1 связана с избыточностью полей класса Expression: возможны ситуации, когда variable != null
и expression != null
.
Updated by Alexander Kamkin over 10 years ago
- Status changed from Resolved to Closed