2014-12-16 4 views
-1

Как назначить входную шину на шину вывода без необходимости назначать каждый индекс (без циклов).правильно назначить выходной массив

У меня было что-то подобное в виду:

module test(input [2:0] in, input CLK, output [2:0] out); 
reg [2:0] state; 
always @(posedge CLK) state <= in; 
assign out = state; 

Но этот код не работает. Мне нужно: out[0] = in[0], out[1] = in[1], out[2] = in[2].

+0

Вы имели в виду 'state <= in', а затем' out = state'? – Qiu

+0

Простите, конечно. Я что-то смутил. Я исправил это. Благодаря! –

+0

Работает для меня, если я добавляю точку с запятой в первой строке. –

ответ

2

Проблемы с давая код:

  • CLK определяется как 3-битовым входом в, должен быть 1-битный
  • недостающее точку с запятой (;) на первой линии
  • отсутствующее ключевое слово endmodule

FYI: Объявив out как output reg Промежуточный пункт state опустить.

module test (
    input  [2:0] in, 
    input   CLK, // <-- CLK is single bit 
    output reg [2:0] out // <-- out is a reg type 
    ); // <-- semicolon here 

    always @(posedge CLK) 
    out <= in; // <-- synchronous assignment 

endmodule // <-- keyword
+0

Мой выход представляет собой провод и предопределен. Я не могу изменить его в заголовке. (Извините за ошибки и спасибо за исправление !!) –

+1

Я немного смущен вашим комментарием. Либо ваш заголовок явно ошибочен, если CLK определил 3-битный вход. Или есть ограничение Xilinx/критерии, с которыми я не знаком. Или есть заблуждение относительно охвата сигнала. 'out' может быть объявлен как« выходной регистр »только в модуле, управляющем им, все остальные части дизайна должны обрабатываться как« провод ». Это _okay_, чтобы выход был «проводником». Я не рекомендую его, потому что он добавляет дополнительные шаги и больше строк кода. – Greg

+0

Мой заголовок выглядит так: (вход [2: 0] в, ввод CLK, выходной провод [2: 0]) '. CLK не 3-х бит. Какие дополнительные шаги необходимы? –