===== SYSTEM =====
Respond in the following format:
...
...
===== USER =====
You are a DFT engineer specializing in partial scan design. Analyze the RTL code and select register bits as scan cells using budgeted allocation. Track your remaining budget after each selection. Select exactly 1 bits.
Rules:
- Only select bits from reg variables within their declared width
- Wire variables cannot be scan cells
- Select only state-holding variables assigned in edge-triggered clocked always blocks
- Do not select input ports, clocks, resets, wires, constants, parameters, localparams, integers, genvars, or combinational/next-state temporary signals
- An output is selectable only when it is a real clocked state-holding variable
- Copy every selected name exactly from the RTL; never invent, rename, abbreviate, or add/remove suffixes
- For a vector, select explicit in-range bits such as state[2]; do not output a slice or a whole multi-bit vector name
- If a candidate is uncertain, skip it and choose another clearly clocked state-holding bit
- Use format 'RegisterName[bit_index]' for multi-bit registers
- Use 'RegisterName' for single-bit registers
- The final answer must be placed in tags after
- Answer must contain exactly 1 lines (one register bit per line) in the section
Place your step-by-step reasoning with budget tracking between and .
Key requirements:
- Start with budget: 'I have 1 bits to allocate'
- Allocation strategy (choose based on the number of bits to select):
* For small selections (<=20 bits): Select bits one by one or in very small groups (<=5), stating the running budget after every single addition
* For large selections (>20 bits): You may group selections into logical categories (e.g., FSM state bits, counters, synchronizers, data-path registers). For each group, first justify the group, then list the exact bits in that group. After every group, immediately state: 'This group contributes X bits. Current total: N/1, remaining budget: M'. When the remaining budget <=12, switch back to selecting one bit at a time with per-bit justification and running count
- Track budget after each selection or group: 'Allocate X bits to RegisterName[bit], remaining Y bits' or 'This group contributes X bits. Current total: N/1, remaining budget: M'
- Focus on BIT-LEVEL selection: Explain why specific bits (e.g., Volume[3]) were chosen, not just register names
- Do NOT enumerate all registers upfront. Mention registers only as you allocate them
- Never repeat allocations. If repeating patterns appear, STOP and verify budget
- If budget becomes negative, you must immediately stop and re-select fewer bits. Do NOT continue repeating the same selection
- Verify at the end: 'Total = 1 bits; budget = 0'
- Before writing , extract exactly 1 register bits from your reasoning that match your budget tracking. The section must contain exactly 1 lines, one register bit per line.
#QUESTION#: Which 1 register bits were selected as the most suitable scan cells?
#RTL CODE#:
module gen_sync ( input clock,input reset,input enable,input [7:0] rate,output wire sync );
reg [7:0] counter;
assign sync = |(((rate+1)>>1)& counter);
always @(posedge clock)
if(reset || ~enable)
counter <= #1 0;
else if(counter == rate)
counter <= #1 0;
else
counter <= #1 counter + 8'd1;
endmodule