2016-03-02 4 views
0

Я начинаю в verilog, поэтому мне нужна ваша помощь. Я хотел сделать код для 2-значного 7-сегментного декодера, но здесь есть синтаксис, который я не могу его распознать.Синтаксическая ошибка в коде Verilog, рядом с "<=": синтаксическая ошибка, неожиданная <=,

Код:

module segment7dec (input [5:0] bin,output [3:0] bcd0,output [3:0] bcd1); 


    case (bin) 
6'd0 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0000; end 

6'd1 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0001; end 

6'd2 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0010; end 

6'd3 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0011; end 

6'd4 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0100; end 

6'd5 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0101; end 

6'd6 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0110; end 

6'd7 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0111; end 

6'd8 : begin bcd1 <= 4'b0000; bcd0 <= 4'b1000; end 

6'd9 : begin bcd1 <= 4'b0000; bcd0 <= 4'b1001; end 

6'd10 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0000; end 

6'd11 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0001; end 

6'd12 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0010; end 

6'd13 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0011; end 

6'd14 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0100; end 

6'd15 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0101; end 

6'd16 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0110; end 

6'd17 : begin bcd1 <= 4'b0001; bcd0 <= 4'b0111; end 

6'd18 : begin bcd1 <= 4'b0001; bcd0 <= 4'b1000; end 

6'd19 : begin bcd1 <= 4'b0001; bcd0 <= 4'b1001; end 

6'd20 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0000; end 

6'd21 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0001; end 

6'd22 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0010; end 

6'd23 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0011; end 

6'd24 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0100; end 

6'd25 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0101; end 

6'd26 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0110; end 

6'd27 : begin bcd1 <= 4'b0010; bcd0 <= 4'b0111; end 

6'd28 : begin bcd1 <= 4'b0010; bcd0 <= 4'b1000; end 

6'd29 : begin bcd1 <= 4'b0010; bcd0 <= 4'b1001; end 

6'd30 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0000; end 

6'd31 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0001; end 

6'd32 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0010; end 

6'd33 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0011; end 

6'd34 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0100; end 

6'd35 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0101; end 

6'd36 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0110; end 

6'd37 : begin bcd1 <= 4'b0011; bcd0 <= 4'b0111; end 

6'd38 : begin bcd1 <= 4'b0011; bcd0 <= 4'b1000; end 

6'd39 : begin bcd1 <= 4'b0011; bcd0 <= 4'b1001; end 

6'd40 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0000; end 

6'd41 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0001; end 

6'd42 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0010; end 

6'd43 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0011; end 

6'd44 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0100; end 

6'd45 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0101; end 

6'd46 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0110; end 

6'd47 : begin bcd1 <= 4'b0100; bcd0 <= 4'b0111; end 

6'd48 : begin bcd1 <= 4'b0100; bcd0 <= 4'b1000; end 

6'd49 : begin bcd1 <= 4'b0100; bcd0 <= 4'b1001; end 

6'd50 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0000; end 

6'd51 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0001; end 

6'd52 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0010; end 

6'd53 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0011; end 

6'd54 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0100; end 

6'd55 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0101; end 

6'd56 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0110; end 

6'd57 : begin bcd1 <= 4'b0101; bcd0 <= 4'b0111; end 

6'd58 : begin bcd1 <= 4'b0101; bcd0 <= 4'b1000; end 

6'd59 : begin bcd1 <= 4'b0101; bcd0 <= 4'b1001; end 

6'd60 : begin bcd1 <= 4'b0110; bcd0 <= 4'b0000; end 
endcase 
    endmodule 

сообщил об ошибке:

Error: C:/modeltech64_10.1c/examples/decoder1.v(4): near "<=": syntax error, unexpected <=, expecting IDENTIFIER or TYPE_IDENTIFIER

+0

http://stackoverflow.com/help/how-to -ask, http://stackoverflow.com/help/no-one-answers, вам, возможно, потребуется прочитать это до публикации. Пожалуйста, отредактируйте и увеличьте качество сообщения, чтобы не получить флагов. – Prasad

+1

Используйте 'case' в некотором процедуре. Подобно «начальным», «всегда» и т. Д. – sharvil111

ответ

3

два основных вопроса, assignents могут быть сделаны с использованием assign к проводам или delcare, как reg и место в блоке initial или always. Например:

module segment7dec (
    input [5:0] bin, 
    output reg [3:0] bcd0, //<-- reg type 
    output reg [3:0] bcd1); 

BCD движимый шлепанцах:

always @(posedge clk) begin 
    case (bin) 
    6'd0 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0000; end 
    6'd1 : begin bcd1 <= 4'b0000; bcd0 <= 4'b0001; end 
    //... 
    endcase 
end 

Или комбинаторной (обратите внимание на изменение типа назначения):

always @* begin 
    case (bin) 
    6'd0 : begin bcd1 = 4'b0000; bcd0 = 4'b0000; end 
    6'd1 : begin bcd1 = 4'b0000; bcd0 = 4'b0001; end 
    //... 
    endcase 
end 
+1

Пока вы вводили свой ответ, я печатал свой почти идентичный ответ. Кроме того, я не заметил неблокирующих назначений для комбинационной логики. Я трачу слишком много времени на VHDL. –

+0

Морган, Мэтью, теперь я понимаю ошибки, они мне кажутся очень глупыми после того, как я получил это: D, большое спасибо за ваш ответ. –

2

Есть две проблемы, мешающие вам компиляции это:

i) Оператор case должен находиться в пределах всегда блока. Любое подобное заявление (например, if) должно быть в блоке always. Если концепция блока always вам не знакома, вам нужно узнать о них.

always @(*) 
case (bin) 

ii) По умолчанию выходы представляют собой провода. Вы не можете управлять wire от блока always. Вы можете назначить только reg из блока always. Ваши выходы должны быть reg.

module segment7dec (input [5:0] bin, output reg [3:0] bcd0, output reg [3:0] bcd1); 

Ваши задания в блоке всегда должны быть также "блокирование", так как это комбинационная логика:

6'd0 : begin bcd1 = 4'b0000; bcd0 = 4'b0000; end 

http://www.edaplayground.com/x/RxS

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