|
发表于 2004-6-19 10:20:33
|
显示全部楼层
[求助]请大侠们帮看此程序,小妹实在看不懂了
[这个贴子最后由iamchine在 2004/06/21 07:41am 第 3 次编辑]
Verilog看的懂吧?
module ddd ( //inputs
clk,
din,
// outputs
a,
dout,
q,
en,
wr,
cs,
rd
);
// inputs
input clk;
input [7:0] din;
// outputs
output [5:0] a;
output [7:0] dout;
output [7:0] q;
output en;
output wr;
output cs;
output rd;
// wires of inputs
wire clk;
wire [7:0] din;
// wires of outputs
// regs of outputs
reg [5:0] a;
reg [7:0] dout;
reg [7:0] q;
reg en;
reg wr;
reg cs;
reg rd;
// internal signals
// wires of internal signals
// regs of internal signals
reg x;
reg [5:0] aa;
reg [7:0] do;
// integers
integer state;
integer tmp;
integer cnt;
// main code
always@(posedge clk)
begin
if(x==1'b0)
begin
wr <= 1'b1;
cs <= 1'b1;
rd <= 1'b1;
x <= 1'b1;
end// end x==1'b0
else
begin
case (state)
0 :
begin
case (tmp)
0:
begin
a <= aa;
case (aa)
6'b000000: do <= 8'b00000000;
6'b000001: do <= 8'b00000001;
6'b000010: do <= 8'b00000010;
6'b000011: do <= 8'b00000011;
6'b000100: do <= 8'b00000100;
6'b000101: do <= 8'b00000101;
6'b000110: do <= 8'b00000110;
6'b000111: do <= 8'b00000111;
6'b001000: do <= 8'b00001000;
6'b001001: do <= 8'b00001001;
6'b001010: do <= 8'b00001010;
6'b001011: do <= 8'b00001011;
6'b001100: do <= 8'b00001100;
6'b001101: do <= 8'b00001101;
6'b001110: do <= 8'b00001110;
6'b001111: do <= 8'b00001111;
6'b010000: do <= 8'b11110000;
6'b010001: do <= 8'b11110001;
6'b010010: do <= 8'b11110010;
6'b010011: do <= 8'b11110011;
6'b010100: do <= 8'b11110100;
6'b010101: do <= 8'b11110101;
6'b010110: do <= 8'b11110110;
6'b010111: do <= 8'b11110111;
6'b011000: do <= 8'b11111000;
6'b011001: do <= 8'b11111001;
6'b011010: do <= 8'b11111010;
6'b011011: do <= 8'b11111011;
6'b011100: do <= 8'b11111100;
6'b011101: do <= 8'b11111101;
6'b011110: do <= 8'b11111110;
6'b011111: do <= 8'b11111111;
6'b100000: do <= 8'b11111110;
6'b100001: do <= 8'b11111101;
6'b100010: do <= 8'b11111100;
6'b100011: do <= 8'b11111011;
6'b100100: do <= 8'b11111010;
6'b100101: do <= 8'b11111001;
6'b100110: do <= 8'b11111000;
6'b100111: do <= 8'b11110111;
6'b101000: do <= 8'b11110110;
6'b101001: do <= 8'b11110101;
6'b101010: do <= 8'b11110100;
6'b101011: do <= 8'b11110011;
6'b101100: do <= 8'b11110010;
6'b101101: do <= 8'b11110001;
6'b101110: do <= 8'b11110000;
6'b101111: do <= 8'b11111111;
6'b110000: do <= 8'b11101111;
6'b110001: do <= 8'b11011111;
6'b110010: do <= 8'b11001111;
6'b110011: do <= 8'b10111111;
6'b110100: do <= 8'b10101111;
6'b110101: do <= 8'b10011111;
6'b110110: do <= 8'b10001111;
6'b110111: do <= 8'b01111111;
6'b111000: do <= 8'b01101111;
6'b111001: do <= 8'b01011111;
6'b111010: do <= 8'b01001111;
6'b111011: do <= 8'b00111111;
6'b111100: do <= 8'b00101111;
6'b111101: do <= 8'b00011111;
6'b111110: do <= 8'b00001111;
6'b111111: do <= 8'b11111111;
default:
endcase// end case aa
dout <= do;
tmp <= 1;
end // end tmp=0
1:
begin
wr <= 1'b0;
cs <= 1'b0;
tmp<= 2;
end// end tmp=1
2:
begin
aa <= aa + 6'b1;
if (~|aa)
begin
state <= 1;
en <= 1'b1;
end
wr <= 1'b1;
cs <= 1'b1;
tmp<= 0;
end// end tmp=2
endcase// end case tmp
end// end state=0
1:
begin
case (cnt)
0: begin
a <= aa;
aa<= aa + 6'b1;
cnt <= 1;
end// end cnt=0
1: begin
rd <= 1'b0;
cs <= 1'b0;
cnt<= 2;
end// end cnt=1
2: begin
q <= din;
cnt <= 3;
end// end cnt=2
3: begin
rd <= 1'b1;
cs <= 1'b1;
cnt <= 0;
end// end cnt=3
endcase// end case cnt
end// end state=1
endcase// end case state
end// end x!=1'b1
end
endmodule
modulescan1( //inputs
aa,
en,
// inouts
bb,
// outputs
qq
);
// inputs
input [7:0] aa;
input en;
// inout
inout [7:0] bb;
// outpus
output [7:0] qq;
// wires
wire [7:0] aa;
wire en;
// inout
wire [7:0] bb;
// outpus
wire [7:0] qq;
assign qq = bb;
assign bb = (!en) ? aa : 8'bzzzzzzzz;
endmodule// it's a bi-direction bus port |
|