Diff
checker
文本
文本
圖像
文檔
Excel
文件夾
Legal
Enterprise
桌面版
定價
登入
下載 Diffchecker 桌面版
比較文本
尋找兩個文字檔案之間的差異
工具
歷史
即時編輯器
摺疊未變更行
關閉換行
檢視
拆分
統一
比對精度
智能
單詞
字符
語法突出顯示
選擇語法
忽略
文字轉換
前往第一個差異
編輯輸入
Diffchecker Desktop
執行Diffchecker最安全的方式。取得Diffchecker桌面應用程式:您的差異永遠不會離開您的電腦!
取得桌面版
Untitled diff
建立於
9 年前
差異永不過期
清除
匯出
分享
解釋
15 刪除
行
總計
刪除
字符
總計
刪除
要繼續使用此功能,請升級到
Diff
checker
Pro
查看價格
48 行
全部複製
12 新增
行
總計
新增
字符
總計
新增
要繼續使用此功能,請升級到
Diff
checker
Pro
查看價格
48 行
全部複製
/************************************************
/************************************************
The Verilog HDL code example is from the book
The Verilog HDL code example is from the book
Computer Principles and Design in Verilog HDL
Computer Principles and Design in Verilog HDL
by Yamin Li, published by A JOHN WILEY & SONS
by Yamin Li, published by A JOHN WILEY & SONS
************************************************/
************************************************/
複製
已複製
複製
已複製
module div_
restoring (a,b,start,clk,clrn,q,r,busy,ready,count);
module div_
non
restoring (a,b,start,clk,clrn,q,r,busy,ready,count);
input [31:0] a; // dividend
input [31:0] a; // dividend
input [15:0] b; // divisor
input [15:0] b; // divisor
input start; // start
input start; // start
input clk, clrn; // clk,reset
input clk, clrn; // clk,reset
output [31:0] q; // quotient
output [31:0] q; // quotient
output [15:0] r; // remainder
output [15:0] r; // remainder
output reg busy; // busy
output reg busy; // busy
output reg ready; // ready
output reg ready; // ready
複製
已複製
複製
已複製
output [4:0] count; // count
er
output [4:0] count; // count
reg [31:0] reg_q;
reg [31:0] reg_q;
reg [15:0] reg_r;
reg [15:0] reg_r;
reg [15:0] reg_b;
reg [15:0] reg_b;
reg [4:0] count;
reg [4:0] count;
複製
已複製
複製
已複製
wire [16:0] sub_
out
=
{reg_r,reg_q[31]}
-
{1'b0,reg_b}
; // sub
wire [16:0] sub_
add
=
reg_r[15]?
wire [15:0] mux_out = sub_out[16]?
//
restoring
{reg_r,reg_q[31]}
+
{1'b0,reg_b}
:
//
+ b
{reg_r
[14:0]
,reg_q[31]}
: sub_out[15:0];
//
or not
{reg_r
,reg_q[31]}
- {1'b0,reg_b};
//
- b
assign q = reg_q;
assign q = reg_q;
複製
已複製
複製
已複製
assign r = reg_r
;
assign r = reg_r
[15]? reg_r + reg_b : reg_r; // adjust r
always @ (posedge clk or negedge clrn) begin
always @ (posedge clk or negedge clrn) begin
if (!clrn) begin
if (!clrn) begin
busy <= 0;
busy <= 0;
ready <= 0;
ready <= 0;
複製
已複製
複製
已複製
end else begin
end else begin
if (start) begin
if (start) begin
reg_q <= a; // load a
reg_q <= a; // load a
reg_b <= b; // load b
reg_b <= b; // load b
reg_r <= 0;
reg_r <= 0;
busy <= 1;
busy <= 1;
ready <= 0;
ready <= 0;
count <= 0;
count <= 0;
end else if (busy) begin
end else if (busy) begin
複製
已複製
複製
已複製
reg_q <= {reg_q[30:0],~sub_
out
[16]}; // << 1
reg_q <= {reg_q[30:0],~sub_
add
[16]}; // << 1
reg_r <=
mux_out
;
reg_r <=
sub_add[15:0]
;
count <= count + 5'b1; // count
er
++
count <= count + 5'b1; // count
++
if (count == 5'h1f) begin // finish
ed
if (count == 5'h1f) begin // finish
busy <= 0;
busy <= 0;
ready <= 1; // q,r ready
ready <= 1; // q,r ready
end
end
end
end
end
end
end
end
endmodule
endmodule
已保存差異
原始文本
開啟檔案
/************************************************ The Verilog HDL code example is from the book Computer Principles and Design in Verilog HDL by Yamin Li, published by A JOHN WILEY & SONS ************************************************/ module div_restoring (a,b,start,clk,clrn,q,r,busy,ready,count); input [31:0] a; // dividend input [15:0] b; // divisor input start; // start input clk, clrn; // clk,reset output [31:0] q; // quotient output [15:0] r; // remainder output reg busy; // busy output reg ready; // ready output [4:0] count; // counter reg [31:0] reg_q; reg [15:0] reg_r; reg [15:0] reg_b; reg [4:0] count; wire [16:0] sub_out = {reg_r,reg_q[31]} - {1'b0,reg_b}; // sub wire [15:0] mux_out = sub_out[16]? // restoring {reg_r[14:0],reg_q[31]} : sub_out[15:0]; // or not assign q = reg_q; assign r = reg_r; always @ (posedge clk or negedge clrn) begin if (!clrn) begin busy <= 0; ready <= 0; end else begin if (start) begin reg_q <= a; // load a reg_b <= b; // load b reg_r <= 0; busy <= 1; ready <= 0; count <= 0; end else if (busy) begin reg_q <= {reg_q[30:0],~sub_out[16]}; // << 1 reg_r <= mux_out; count <= count + 5'b1; // counter++ if (count == 5'h1f) begin // finished busy <= 0; ready <= 1; // q,r ready end end end end endmodule
更改後文本
開啟檔案
/************************************************ The Verilog HDL code example is from the book Computer Principles and Design in Verilog HDL by Yamin Li, published by A JOHN WILEY & SONS ************************************************/ module div_nonrestoring (a,b,start,clk,clrn,q,r,busy,ready,count); input [31:0] a; // dividend input [15:0] b; // divisor input start; // start input clk, clrn; // clk,reset output [31:0] q; // quotient output [15:0] r; // remainder output reg busy; // busy output reg ready; // ready output [4:0] count; // count reg [31:0] reg_q; reg [15:0] reg_r; reg [15:0] reg_b; reg [4:0] count; wire [16:0] sub_add = reg_r[15]? {reg_r,reg_q[31]} + {1'b0,reg_b} : // + b {reg_r,reg_q[31]} - {1'b0,reg_b}; // - b assign q = reg_q; assign r = reg_r[15]? reg_r + reg_b : reg_r; // adjust r always @ (posedge clk or negedge clrn) begin if (!clrn) begin busy <= 0; ready <= 0; end else begin if (start) begin reg_q <= a; // load a reg_b <= b; // load b reg_r <= 0; busy <= 1; ready <= 0; count <= 0; end else if (busy) begin reg_q <= {reg_q[30:0],~sub_add[16]}; // << 1 reg_r <= sub_add[15:0]; count <= count + 5'b1; // count++ if (count == 5'h1f) begin // finish busy <= 0; ready <= 1; // q,r ready end end end end endmodule
尋找差異