Changeset 51 for trunk/MultiChannelUSB/histogram.v
- Timestamp:
- Sep 16, 2009, 12:52:02 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MultiChannelUSB/histogram.v
r47 r51 9 9 // signal declaration 10 10 reg [3:0] state_reg, state_next; 11 reg flag_reg, flag_next; 11 12 reg wren_reg, wren_next; 12 13 reg [11:0] addr_reg, addr_next; … … 14 15 15 16 wire [23:0] q_a_wire, q_b_wire; 17 18 wire [11:0] addr_wire; 19 wire [23:0] data_wire; 20 21 assign addr_wire = (flag_reg) ? data : addr_reg; 22 assign data_wire = (flag_reg) ? (q_a_wire + 24'd1) : data_reg; 16 23 17 24 altsyncram #( … … 39 46 .width_byteena_a(1), 40 47 .width_byteena_b(1), 41 .wrcontrol_wraddress_reg_b("CLOCK0")) hst_ram_unit 42 .wren_a 43 .clock0 44 .wren_b 45 .address_a (addr_reg),46 .address_b 47 .data_a (data_reg),48 .data_b 49 .q_a 50 .q_b 51 .aclr0 52 .aclr1 53 .addressstall_a 54 .addressstall_b 55 .byteena_a 56 .byteena_b 57 .clock1 58 .clocken0 59 .clocken1 60 .clocken2 61 .clocken3 62 .eccstatus 63 .rden_a 64 .rden_b 48 .wrcontrol_wraddress_reg_b("CLOCK0")) hst_ram_unit( 49 .wren_a(wren_reg), 50 .clock0(~clk), 51 .wren_b(1'b0), 52 .address_a(addr_wire), 53 .address_b(address), 54 .data_a(data_wire), 55 .data_b(), 56 .q_a(q_a_wire), 57 .q_b(q_b_wire), 58 .aclr0(1'b0), 59 .aclr1(1'b0), 60 .addressstall_a(1'b0), 61 .addressstall_b(1'b0), 62 .byteena_a(1'b1), 63 .byteena_b(1'b1), 64 .clock1(1'b1), 65 .clocken0(1'b1), 66 .clocken1(1'b1), 67 .clocken2(1'b1), 68 .clocken3(1'b1), 69 .eccstatus(), 70 .rden_a(1'b1), 71 .rden_b(1'b1)); 65 72 66 73 // body … … 69 76 if (reset) 70 77 begin 78 flag_reg <= 1'b0; 79 wren_reg <= 1'b1; 80 addr_reg <= 12'd0; 81 data_reg <= 24'd0; 71 82 state_reg <= 4'b1; 72 83 end 73 84 else 74 85 begin 75 state_reg <= state_next;86 flag_reg <= flag_next; 76 87 wren_reg <= wren_next; 77 88 addr_reg <= addr_next; 78 89 data_reg <= data_next; 90 state_reg <= state_next; 79 91 end 80 92 end … … 82 94 always @* 83 95 begin 84 state_next = state_reg;96 flag_next = flag_reg; 85 97 wren_next = wren_reg; 86 98 addr_next = addr_reg; 87 99 data_next = data_reg; 100 state_next = state_reg; 88 101 case (state_reg) 89 0: ; // nothing to do 90 1: 102 0: 91 103 begin 92 // start reset 93 wren_next = 1'b1; 94 addr_next = 0; 95 data_next = 0; 96 state_next = 4'd2; 104 // nothing to do 105 flag_next = 1'b0; 106 wren_next = 1'b0; 107 addr_next = 12'd0; 108 data_next = 24'd0; 109 state_next = 4'd0; 97 110 end 98 99 2:111 112 1: 100 113 begin 101 114 // write zeros 102 115 if (&addr_reg) 103 116 begin 104 state_next = 4'd3; 117 flag_next = 1'b1; 118 wren_next = 1'b0; 119 state_next = 4'd2; 105 120 end 106 121 else … … 108 123 addr_next = addr_reg + 12'd1; 109 124 end 110 end 111 112 3:125 end 126 127 2: 113 128 begin 114 // read 115 wren_next = 1'b0; 116 if (&data_reg) 129 if (data_ready) 117 130 begin 118 state_next = 4'd0; 119 end 120 else if (data_ready) 121 begin 122 // set addr 123 addr_next = data; 124 state_next = 4'd4; 131 if (&q_a_wire) 132 begin 133 flag_next = 1'b0; 134 state_next = 4'd0; 135 end 136 else 137 begin 138 wren_next = 1'b1; 139 state_next = 4'd3; 140 end 125 141 end 126 142 end 127 143 128 4:144 3: 129 145 begin 130 // increment and write 131 wren_next = 1'b1; 132 data_next = q_a_wire + 24'd1; 133 state_next = 4'd3; 146 wren_next = 1'b0; 147 state_next = 4'd2; 134 148 end 135 149 136 150 default: 137 151 begin 152 flag_next = 1'b0; 153 wren_next = 1'b0; 154 addr_next = 12'd0; 155 data_next = 24'd0; 138 156 state_next = 4'd0; 139 157 end
Note:
See TracChangeset
for help on using the changeset viewer.