2017-01-04 2 views
0

Сэр, У меня есть некоторые сомнения относительно цикла внутри всегда блока. Пожалуйста, уточните меня. Все итерации выполнены в одном такте? что произойдет, если для цикла внутри другого для цикла, который внутри всегда заблокирован? Пожалуйста, помогите мне найти ошибки в следующем programm.Thank васдля петли внутри всегда предустановленных часов

reg [5:0] c; 
reg [2:0] m; 
reg G[5:0][2:0] = {{1'b1,1'b0,1'b0},{1'b0,1'b1,1'b0},{1'b0,1'b0,1'b1}, {1'b1,1'b1,1'b0},{1'b0,1'b1,1'b1},{1'b1,1'b0,1'b1}}; 
integer i; 
integer j; 
always @(posedge clk1) 
begin 
    for(i=0;i<6;i=i+1) 
     begin 
      c[i]=0; 
      for(j=2;j>=0;j=j-1) 
       begin 
        c[i] <= c[i]^(m[j]&G[2-j][i]); 
       end 
     end 
end 
+0

Ваш код выглядит как код 'C'. Никогда не записывайте код в формате HDL в качестве программного кода. Сначала вы должны подумать об оборудовании, которое хотите создать, а затем вы должны соответствующим образом закодировать код. Каков ваш дизайн здесь? –

ответ

0

думать о always блока, немного программного обеспечения, модели немного оборудования. Список чувствительности - это список триггеров, которые, когда какое-либо из них изменяется, программное обеспечение выполняет для расчета того, какие новые выходы должны быть.

Для комбинационнойalways блока на все входы находятся в списке чувствительности (с использованием @(*) конструкции), так что, если любые входные изменения, выходы этого немного аппаратных средств может измениться (в значительной степени определение комбинационной логики). Таким образом, если какой-либо из входов изменяется, программное обеспечение выполняет вычисления для того, что будет означать новые выходы из этого небольшого количества комбинационной логики.

Для блока последовательногоalways, только часы и (если он присутствует) асинхронный сброс в списке чувствительности, так как ни один другой вход непосредственно не вызывает выходы для изменения. Поэтому для последовательного блока, если часы (или асинхронный сброс) изменяются, тогда программное обеспечение выполняет вычисления для того, что будет означать новые выходы этого небольшого бит последовательной логики.

Итак, в вашем случае у вас есть последовательный блок alwaysбез асинхронный сброс. Это немного программного обеспечения, которое моделирует немного последовательной логики. Выходы этой последовательной логики будут меняться только тогда, когда часы меняются (если на clk1 есть нарастающий фронт). Таким образом, если на clk1 возникает нарастающий фронт, код внутри блока always начинает выполняться, чтобы рассчитать, какие будут новые значения массива c (выходы вашей последовательной логики, поскольку это переменная , назначенная в этот конкретный блок always). Тот факт, что в этом коде есть петли, не имеет значения. Если на clk1 есть нарастающий фронт, то петли будут выполняться полностью (не дожидаясь увеличения нарастающих фронтов на clk1), чтобы рассчитать, что будет нового значения c.

Смежные вопросы