2016-04-06 4 views
1

Resulting Schematic after synthesisSchematic to VerilogПреобразование этой схемы в Verilog код, скомпилировать безуспешным

Ниже приведен полный код. Я просто хотел бы реализовать схему ниже в коде Verilog. Просто немного смущаюсь, если я могу написать комбинаторную логику и последовательную логику в одном блоке или нет. Во-вторых, для чувствительного списка потребуется синхронизировать импульсы и вводить изменения. Пожалуйста, помогите, Это решение, разрешенное вручную, но теперь я хотел бы взять его в Verilog и реализовать его в Verilog и посмотреть вывод.

module Q4a(
input x, 
input clock, 
output z 
); 
reg z; 
reg y1,y2; 
reg d1,d2; 
//wire x; 
//wire clock; 

always @(x,y1,y2) 
begin 
d1=(~x)&y2; 
d2=x; 
z=x&y1; 
end 

always @(clock) 
begin 
//y1<=(~x)&y2; 
//y2<=x; 
//z<=x&y1; 
y1<=d1; 
y2<=d2; 

end 
endmodule 

ответ

2

x и z имеют особое значение в Verilog, было бы лучше использовать что-то еще для имен переменных.

module Q4a(
input x, 
input clock, 
output reg z //Just declare as reg here 
); 

reg y1,y2; 
reg d1,d2; 

// Use automatic sensitivity list 
always @* begin 
    d1=(~x)&y2; 
    d2=x; 
    z=x&y1; 
end 

//Filp-flops use `posedge` to make edge sensitive 
always @(posedge clock) begin 
    y1<=d1; 
    y2<=d2; 
end 

endmodule 

Это компилируется в vcs по EDA Playground. Но обзор я хотел бы написать, как:

module Q4a(
input  x, 
input  clock, 
output reg z 
); 

reg y1,y2; 

always @* begin 
    z = x & y1; 
end 

always @(posedge clock) begin 
    y1 <= ~x & y2; 
    y2 <= x; 
end 

endmodule 
+0

Нужно не использовать г и х или это ваше предложение (рекомендуется)? –

+0

@ Морган. Спасибо. Оба синтеза являются одной и той же схемой в Xilinx ISE tool версии 14.2 (64-разрядная версия). Я обновляю результирующую схему на исходном сообщении. – newb7777

+2

@PrakashDarji вы можете использовать x и z как имена переменных, но я считаю, что это супер запутанное, т.е. 'a = x' vs' a = 'x' означает совсем другие вещи. – Morgan

1

Это не обязательно использовать always begin ... end всегда, вы можете использовать прямое заявление присвойте писать комбинационную схему.

Смотрите ниже код:

module Q4a (
      input wire x, 
      input wire clock, 
      input wire rst_n, 
      output wire z 
     ); 

wire d1; 
reg y1; 
reg y2; 

assign d1 = ~x & y2; 
assign z = x & y1; 

always @ (posedge clock or negedge rst_n) 
begin 
    if(rst_n) begin 
    y1 <= 1'b0; 
    y2 <= 1'b0; 
    end else begin 
    y1 <= d1; 
    y2 <= x; // x is d2 too. 
    end 
end 

endmodule 

Или вы также можете сделать что-то подобное тоже

assign z = x & y1; 

always @ (posedge clock or negedge rst_n) 
begin 
    if(rst_n) begin 
    y1 <= 1'b0; 
    y2 <= 1'b0; 
    end else begin 
    y1 <= ~x & y2; 
    y2 <= x; // x is d2 too. 
    end 
end