Diff
checker
Testo
Testo
Immagini
Documenti
Excel
Cartelle
Legal
Enterprise
Applicazione per desktop
Prezzi
Accedi
Scarica Diffchecker Desktop
Confronta il testo
Trova la differenza tra due file di testo
Strumenti
Cronologia
Editor live
Comprimi invariate
Senza a capo
Layout
Diviso
Unificato
Livello di dettaglio
Intelligente
Parola
Carattere
Evidenziazione sintassi
Scegli sintassi
Ignora
Trasforma testo
Vai alla prima modifica
Modifica input
Diffchecker Desktop
Il modo più sicuro per usare Diffchecker. Ottieni l'app Diffchecker Desktop: i tuoi diff non lasciano mai il tuo computer!
Ottieni Desktop
Untitled diff
Creato
9 anni fa
Il diff non scade mai
Eliminare
Esporta
Condividere
Spiegare
15 rimozioni
Linee
Totale
Rimosso
Caratteri
Totale
Rimosso
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
48 linee
Copia tutti
12 aggiunte
Linee
Totale
Aggiunto
Caratteri
Totale
Aggiunto
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
48 linee
Copia tutti
/************************************************
/************************************************
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
************************************************/
************************************************/
Copia
Copiato
Copia
Copiato
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
Copia
Copiato
Copia
Copiato
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;
Copia
Copiato
Copia
Copiato
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;
Copia
Copiato
Copia
Copiato
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;
Copia
Copiato
Copia
Copiato
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
Copia
Copiato
Copia
Copiato
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
Diff salvati
Testo originale
Apri file
/************************************************ 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
Testo modificato
Apri file
/************************************************ 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
Trovare la differenza