| ??? 02/23/07 16:33 Read: times |
#133564 - Simulation and Synthesis of verilog code |
Hi,
Iam here again with next stage of my "Verilog implementation of 8254 Interval Timer" project. Having finished the coding for the entire chip, i tried synthesis and simulation. It showed a max frequency of 56MHZ (rounded off)in my synthesis by implementing with Spartan 2 family. I would like to know whether thats a better number of being achieved for an 8254 timer chip. But unwanted latches were also formed. I need to avoid it. and on simulation, i started checking block by block. first i took the r/w logic block and forced a particular combination of input. But couldnt get correct o/p on all output pins. Here is the code for your reference., module rw_logic
(data_io, //'mode inout' 8254 data I/O port
ctr_din, //'mode output'connects to counters input data bus
creg_select, //'mode output'control register select signal
ctr0_rd, //'mode output'counter0 read signal.
ctr1_rd, //'mode output'counter1 read signal.
ctr2_rd, //'mode output'counter2 read signal.
ctr0_wr, //'mode output'counter0 write signal.
ctr1_wr, //'mode output'counter1 write signal.
ctr2_wr, //'mode output'counter2 write signal.
ctr_dout, //'mode input'connects to counters output data bus
cs,//'mode input'chip select signal for 8254
a0,//'mode input'a1 and a0(addr) are address lines that selects any counter or control word register to R/W
a1, //'mode input'a1 and a0(addr) are address lines that selects any counter or control word register to R/W
wr,//'mode input'input write signal to 8254
rd //'mode input'input read signal to 8254
);
inout [7:0]data_io;
input [7:0]ctr_dout;
input cs,wr,rd,a0,a1;
output [7:0]ctr_din;
output creg_select,ctr0_rd,ctr1_rd,ctr2_rd,ctr0_wr,ctr1_wr,ctr2_wr;
reg creg_select,ctr0_rd,ctr1_rd,ctr2_rd,ctr0_wr,ctr1_wr,ctr2_wr;
reg [1:0] addr;
assign data_io = ((!cs && !rd)?ctr_dout:8'bZZZZZZZZ);
assign ctr_din = ((!cs && !wr)?data_io:8'bZZZZZZZZ);
always@(cs)
begin
if (!cs && !rd)
begin
addr[1:0] <= {a1,a0};
if (addr == 2'b00)
begin
ctr0_rd <= 1'b1;
ctr1_rd <= 1'b0;
ctr2_rd <= 1'b0;
end
else
begin
if (addr == 2'b01)
begin
ctr1_rd <= 1'b1;
ctr0_rd <= 1'b0;
ctr2_rd <= 1'b0;
end
else
begin
if (addr == 2'b10)
begin
ctr2_rd <= 1'b1;
ctr1_rd <= 1'b0;
ctr0_rd <= 1'b0;
end
else
begin
ctr0_rd <= 1'b0;
ctr1_rd <= 1'b0;
ctr2_rd <= 1'b0;
end
end
end
end
else
begin
if (!cs && !wr)
begin
addr[1:0] <= {a1,a0};
if (addr == 2'b00)
begin
ctr0_wr <= 1'b1;
ctr1_wr <= 1'b0;
ctr2_wr <= 1'b0;
creg_select <= 1'b0;
end
else
begin
if (addr == 2'b01)
begin
ctr1_wr <= 1'b1;
ctr0_wr <= 1'b0;
ctr2_wr <= 1'b0;
creg_select <= 1'b0;
end
else
begin
if (addr == 2'b10)
begin
ctr2_wr <= 1'b1;
ctr1_wr <= 1'b0;
ctr0_wr <= 1'b0;
creg_select <= 1'b0;
end
else
begin
if (addr == 2'b11)
begin
creg_select <= 1'b1;
ctr2_wr <= 1'b0;
ctr1_wr <= 1'b0;
ctr0_wr <= 1'b0;
end
else
begin
ctr0_wr <= 1'b0;
ctr1_wr <= 1'b0;
ctr2_wr <= 1'b0;
creg_select <= 1'b0;
end
end
end
end
end
else
begin
ctr0_rd <= 1'bZ;
ctr1_rd <= 1'bZ;
ctr2_rd <= 1'bZ;
ctr0_wr <= 1'bZ;
ctr1_wr <= 1'bZ;
ctr2_wr <= 1'bZ;
creg_select <= 1'bZ;
addr [1:0] <= 2'bXX;
end
end
end
endmodule
I forced this i/p combination for write operation., CS = 0 wr = 0 rd = 1 a0 & a1 = 1 data_io = 8 bit data. for this the o/p should be., ctr_din = 8 bit data //( i got this ) creg_select = 1 // ( i couldnt get this. It remained low when simulated. i would like to know whether i have done any mistake in the code. i cheked it but couldnt sort it out. I would like to get some suggestions on this. regard's Suresh. |
| Topic | Author | Date |
| Simulation and Synthesis of verilog code | 01/01/70 00:00 | |
| my comments on having a quick look | 01/01/70 00:00 | |
| if..else... | 01/01/70 00:00 | |
| Changes to verilog code | 01/01/70 00:00 | |
| worst case?? | 01/01/70 00:00 | |
| Logical "Z" state, data buses, and more | 01/01/70 00:00 | |
| Not sure what happens in verilog but vhdl | 01/01/70 00:00 | |
Verilog vs VHDL types | 01/01/70 00:00 | |
| But in the 8254 datasheet, | 01/01/70 00:00 | |
| More on Verilog data buses | 01/01/70 00:00 | |
| Thank you Lynn! | 01/01/70 00:00 | |
| XILILNX is the problem! | 01/01/70 00:00 | |
| Spartan II is just out of choices | 01/01/70 00:00 | |
| There are good reasons for Spartan-II | 01/01/70 00:00 | |
| Altera is doubly unhelpful | 01/01/70 00:00 | |
| Where's the 805x? | 01/01/70 00:00 | |
| well, he is fooling with a 8254 | 01/01/70 00:00 | |
| "chat forum" | 01/01/70 00:00 | |
| Well, OK ... | 01/01/70 00:00 | |
| how was I to know that? | 01/01/70 00:00 | |
| mentioned in an earlier thread Erik., | 01/01/70 00:00 |



