【Verilog】数据流建模传输问题:赋值传输有方向
生活随笔
收集整理的這篇文章主要介紹了
【Verilog】数据流建模传输问题:赋值传输有方向
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這次,我們說明的是,assign語句實現的數據流建模,包含的是兩個層面
assign A = B的本質含義是
這個傳輸方向至關重要,實際情況是什么,就必須按照順序進行,不是單純地連線,本質是數據的傳輸,是有方向的。
看看下面的CPU的例子,注意注釋中的【關注點】
// 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 Outputs wire [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 Inputs wire [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優化的結果是
我們看看錯誤的示例
只是修改了關注點的部分,然而是錯誤的,但是,RTL優化結果看起來一樣,行為仿真的時候writeData確實Z 高阻抗狀態。
高阻抗是為什么?
通常就是不同的信號撞一起了。
對于同一個線路,同時輸入0和1就產生了高阻抗。
我們看看之前的示例是為什么。
我們關注下面的部分
在正確的示例中,使用的是
wire [31:0] ALUresult; wire [31:0] writeData = ALUresult;也就是這樣的,這是符合CPU的運算邏輯的,將ALU結果輸出到寄存器寫入。
錯誤的示例是
這個時候,我們設置的是紅色箭頭的方向,而實際上,CPU運算會輸出橘色箭頭的數據,兩個不同的輸出撞一起導致了Z高阻抗狀態!
小結
賦值語句是有方向的!代表了邏輯設計方向,代表了數據傳輸方向,不能錯!
一般都是右值賦給左值,同時,說明了傳輸方向是B到A!
補充
如果兩個信號的聲明和賦值順序是反著的,可以聲明的時候不賦值,之后使用assign語句就好了。
wire A; wire B; assign A = B;等價于
wire B; wire A = B;總結
以上是生活随笔為你收集整理的【Verilog】数据流建模传输问题:赋值传输有方向的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 极米z4x和h1差别大吗,极米z4x h
- 下一篇: 【电路原理】学习笔记(1):电路模型的基