原创 两种代码方式

2015-5-19 11:18 1328 15 15 分类: FPGA/CPLD 文集: ASIC


下面的两段程序等价,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

20150519105845812.jpg


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条评论)

登录后参与讨论
我要评论
0
15
关闭 站长推荐上一条 /2 下一条