下面的两段程序等价,RTL图以及综合后的结果 完全一样。
看似简单,其实是两种不同的思维方式。在复杂电路中能体现出两种方式各自的特点,第一种容易理解,第二种则结构更清晰,更接近综合后的结果。
以前习惯用上边的编程方式,看似都是时序控制,隐含了组合逻辑;
下边的程序则把组合逻辑和时序逻辑分开写,结构比较清晰,更适合用在多级流水线中,易于程序的维护。
module top(
input clk,
input [1:0] datain1,
input [1:0] datain2,
output reg [1:0] dataout
);
reg [1:0] data1,data2;
always@(posedge clk)
begin
data1<=datain1;
data2<=datain2;
end
always@(posedge clk)
dataout<=data1+data2;
//reg [1:0]data3;
//always@(*)
// data3=data1+data2;
//
//always@(posedge clk)
// dataout<=data3;
endmodule
module top(
input clk,
input [1:0] datain1,
input [1:0] datain2,
output reg [1:0] dataout
);
reg [1:0] data1,data2;
always@(posedge clk)
begin
data1<=datain1;
data2<=datain2;
end
//always@(posedge clk)
// dataout<=data1+data2;
reg [1:0]data3;
always@(*)
data3=data1+data2;
always@(posedge clk)
dataout<=data3;
endmodule
文章评论(0条评论)
登录后参与讨论