?? divider_cd.v
字號(hào):
module cale_de_date (A,B,ck,reset,zero,msb_p,ld_A,shl_A,ld_B,ld_C,dec_C,
ld_P,shl_P,clr_P,reg_A,P);
input ck; //semnal de clock
input reset; //semnalul de reset
input [7:0] A,B;
output [7:0] reg_A;
output [8:0] P;
output zero; //semnal de semnalizare de ZERO a valorii numaratorului
output msb_p; //semnal pentru msb_p
// semnale de intrare in cale de date si iesire din calea de control
input ld_A; // semnal de incarcare reg_A
input shl_A; //semnal de shiftare stinga a reg_A
input ld_B; //semnal de incarcare reg_B
input ld_C; //semnal de incarcare a reg_C
input dec_C; // semnal de decrementare a reg_C
input ld_P; //semnal de incarcare a valorii lui P
input shl_P; //semnal de shiftare stinga a lui P
input clr_P; // semnal de resetare a registrului P
reg[7:0] reg_A ; //declararea reg_A
reg[7:0] reg_B ; //declararea reg_B
reg[3:0] reg_C ; //declararea reg_C
reg[8:0] P; //declararea registrului P
assign msb_p = P[8];
// se calculeaza valoarea de zero adica iesirea din numarator prin poarta SAU NEGAT
assign zero=~|reg_C[3:0];
always @(posedge ck or negedge reset)
begin
if(!reset)
reg_A <= 0;
else
if(ld_A)
reg_A <=A;
else
if(shl_A)
reg_A <={reg_A[6:0],~P[8]};
end
always @(posedge ck or negedge reset)
begin
if(!reset)
reg_B <= 0;
else
if(ld_B) reg_B <= B;
end
always @(posedge ck or negedge reset)
begin
if(!reset)
reg_C <= 0;
else
if(ld_C)
reg_C<= 4'b1000;
else
if(dec_C)
reg_C <=reg_C - 1;
end
//registrul reg_P
always @(posedge ck or negedge reset)
if(!reset)
P <= 0;
else
begin
if (clr_P)
P <= 0;
if (ld_P)
if (P[8])
P <= P + reg_B;
else
P <= P - reg_B;
if(shl_P)
P <={P[7:0],reg_A[7]};
end
endmodule
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -