ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
749119
Николай Коровин (11.04.2017 17:12 - 17:37, просмотров: 5431)
Согласен с (→). Да будет отдельной темой вопрос, может ли диалект Си быть полноценным языком поведенческого описания логики. http://caxapa.ru/745670.html
Добавим стандартные целочисленные типы uXX и sXX для произвольной разрядности. u24, u3, s12. volatile обозначает сигнал, который сам своё состояние хранить не умеет. while (clk) обозначает конструкцию, завязанную на положительный фронт тактирования, while (!clk) — на отрицательный. Добавим delay(x), обозначающий, что распространение сигнала между последней цепью выше него должно закончиться на x наносекунд раньше, чем между первой цепью ниже него. Получается довольно складный синтаксис, вот гляньте: volatile u1 Dir; volatile u24 In1, In2, Out; if (Dir) Out=In1; else Out=In2; //асинхронный 24-битный шинный мультиплексор u8 Lock; volatile u8 Sig; volatile u1 C; if (C) Lock = Sig; //восьмибитный latch или посложнее вот u12 Cnt, Max; volatile u14 Out; while (Clk) { if (Cnt == Max) { Out=BRAM[Index]; Index++; Cnt=0; } else Cnt++; } А вот как делать нельзя: while (Clk) { Out=Index; Index++; Out2=Index; //Синтаксическая ошибка, Index уже переопределено. } А надо — вот так, ибо это всё-таки Си и последовательность имеет значение: while (Clk) { Out=Index; Out2=Index; Index++; } Ибо если сделать вот так while (Clk) { Out=Index; delay (0); Out2=Index; Index++; } то сишная натура такого описания тут же покажет свои зубы. А, и, конечно, тот загадочный синхронно-асинхронный latch. volatile u1 inS1, inS2, inS3; u1 outS4; if (inS3) { outS4=inS1; } else while (inS2) { outS4=inS1; } Неопределённый для некоторых сочетаний сигнал — warning. Противоречивое определение — error. Входные сигналы — аргументы функции. Выходные — её значение, в общем случае имеет тип структуры. Ага, прямо struct {бла бла сигналы} имя функции (бла бла входные сигналы) {бла бла тело функции}. return меня смущает, но я ещё подумаю. Чем такой «Си» не VHDL/Verilog?