2016-03-29 3 views
0

Я не знаю, что не так с моим кодом, возможно, много чего. прямо сейчас, я не могу понять, как назначить значения регистров для моих выходов En. Сейчас я должен использовать код Verilog для курса цифровых схем. Мне немного надоедает.Вопросы Verilog

`timescale 1ns/1ps 
///////////////////////////////////////////////////////////////////////////////// /
// Company: 
// Engineer: 
// 
// Create Date: 13:57:18 03/15/2016 
// Design Name: 
// Module Name: Moving7Seg 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision: 
// Revision 0.01 - File Created 
// Additional Comments: 
// 
////////////////////////////////////////////////////////////////////////////////// 
module Moving7Seg(B, C, Rst, ClkIn, D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0); 

input B, C, Rst, ClkIn; 
output D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0; 

//wire D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0; 

reg ClkOut = 0; 
reg bLast = 0; 
reg cLast = 0; 
//reg rstLast = 0; 

reg [3:0]count = 0; 
reg [3:0]enable = 4'b0001; 


clockdivider getClk(ClkIn, ClkOut); 
seg7 convert(count[3], count[2], count[1], count[0], D6, D5, D4, D3, D2, D1, D0); 



always @(posedge ClkOut) begin 
    if(Rst == 1) begin 
     count = 0; 
     enable = 4'b0001; 
    end 

    if(B != bLast && B == 0) begin 
     case(enable) 
     4'b0001: enable = 4'b0010; 
     4'b0010: enable = 4'b0100; 
     4'b0100: enable = 4'b1000; 
     default: enable = 4'b0001; 
     endcase 
    end 

    if(C != cLast && C == 0) begin 
     count = count + 1; 
    end 

bLast = B; 
cLast = C; 
//rstLast = Rst; 


end 

En3 <= enable[3]; 
En2 <= enable[2]; 
En1 <= enable[1]; 
En0 <= enable[0]; 
convert; 

endmodule 
+1

Измените 'output D6, D5, D4, D3, D2, D1, D0, En3, En2, En1, En0;' для вывода D6, D5, D4, D3, D2, D1, D0; 'и другой строки 'output reg En3, En2, En1, En0;' – Greg

+0

Все назначения, такие как 'En3 <= enable [3];' должны находиться внутри процедурных блоков. Не нужно вызывать экземпляр модуля ('convert' в конце). Экземпляры автоматически выполняются на каждом временном шаге. – rahulcodesinverilog

+0

У меня были задания типа «En3 <= enable [3];» в конце всегда блока, но это еще не было распознано ». Ссылка на скалярный провод« En3 »не является юридическим регистром или переменной lvalue» – Raisintoe

ответ

0

1) Если эти выходы «En» должны отражать текущее состояние enable сигнала, то вы, вероятно, необходимо «назначить» значения, как это (и держать их вне always блока):

assign En3 = enable[3]; 
    assign En2 = enable[2]; 
    assign En1 = enable[1]; 
    assign En0 = enable[0]; 

2) Как уже упоминалось в комментарии, удалите лишнюю строку «конвертировать».

3) Все назначения, которые находятся внутри блока всегда должны быть неблокируемыми. То есть, используйте оператор назначения <=, а не оператор =.

4) Вам, вероятно, нужен случай else для проверки Rst. То есть, все обновления разрешения, подсчета и т. Д. Должны произойти только в том случае, если Rst != 0.

5) Возможно, вы также захотите сбросить bLast и cLast.

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