当前位置:首页 >> 半导体技术突破 >> 【Verilog】数据流建模传输问题:赋值传输有方向,wp8应用商店(verilog数据流描述)

【Verilog】数据流建模传输问题:赋值传输有方向,wp8应用商店(verilog数据流描述)

cpugpu芯片开发光刻机 半导体技术突破 1
文件名:【Verilog】数据流建模传输问题:赋值传输有方向,wp8应用商店 【Verilog】数据流建模传输问题:赋值传输有方向

这次,我们说明的是,assign语句实现的数据流建模,包含的是两个层面

建立联系传输方向

assign A = B的本质含义是

A与B建立关联B的值传给A

这个传输方向至关重要,实际情况是什么,就必须按照顺序进行,不是单纯地连线,本质是数据的传输,是有方向的。

看看下面的CPU的例子,注意注释中的【关注点】

// reg_files_1 Inputswire [31:0] ALUresult;// 【关注点1】wire [4:0] rA = instruction[25:21];wire [4:0] rB = instruction[20:16];wire [4:0] rW = instruction[15:11];wire [31:0] writeData = ALUresult;// 【关注点2】wire RegWrite;// reg_files_1 Outputswire [31:0] A;wire [31:0] B;reg_files_1 u_reg_files_1 (.clk ( clk ),.rst_n ( rst_n ),.rA ( rA ),.rB ( rB ),.rW ( rW ),.writeData ( writeData ),.RegWrite ( RegWrite ),.A ( A ),.B ( B ));/******** ALU ********/// ALU_1 Inputswire [3:0] ALUop;// ALU_1 Outputs// wire [31:0] ALUresult = writeData; // 【关注点3】ALU_1 u_ALU_1 (.A ( A ),.B ( B ),.ALUop ( ALUop ),.ALUresult ( ALUresult ));

上面的例子是正确的,RTL优化的结果是 我们看看错误的示例

// reg_files_1 Inputs// wire [31:0] ALUresult;// 【关注点1】wire [4:0] rA = instruction[25:21];wire [4:0] rB = instruction[20:16];wire [4:0] rW = instruction[15:11];wire [31:0] writeData; // = ALUresult;// 【关注点2】wire RegWrite;// reg_files_1 Outputswire [31:0] A;wire [31:0] B;reg_files_1 u_reg_files_1 (.clk ( clk ),.rst_n ( rst_n ),.rA ( rA ),.rB ( rB ),.rW ( rW ),.writeData ( writeData ),.RegWrite ( RegWrite ),.A ( A ),.B ( B ));/******** ALU ********/// ALU_1 Inputswire [3:0] ALUop;// ALU_1 Outputswire [31:0] ALUresult = writeData; // 【关注点3】ALU_1 u_ALU_1 (.A ( A ),.B ( B ),.ALUop ( ALUop ),.ALUresult ( ALUresult ));

只是修改了关注点的部分,然而是错误的,但是,RTL优化结果看起来一样,行为仿真的时候writeData确实Z 高阻抗状态。

高阻抗是为什么?

通常就是不同的信号撞一起了。

对于同一个线路,同时输入0和1就产生了高阻抗。

我们看看之前的示例是为什么。

我们关注下面的部分

在正确的示例中,使用的是

wire [31:0] ALUresult;wire [31:0] writeData = ALUresult;

也就是这样的,这是符合CPU的运算逻辑的,将ALU结果输出到寄存器写入。 错误的示例是

wire [31:0] writeData;wire [31:0] ALUresult = writeData;

这个时候,我们设置的是红色箭头的方向,而实际上,CPU运算会输出橘色箭头的数据,两个不同的输出撞一起导致了Z高阻抗状态!

小结

赋值语句是有方向的!代表了逻辑设计方向,代表了数据传输方向,不能错!

一般都是右值赋给左值,同时,说明了传输方向是B到A!

补充

如果两个信号的声明和赋值顺序是反着的,可以声明的时候不赋值,之后使用assign语句就好了。

wire A;wire B;assign A = B;

等价于

wire B;wire A = B;
协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接