какую плату Вы используете? судя по тому, что разбираетесь с PLL у Вас не плата марсоход, правильно? Ведь PLL есть только в FPGA..
Не очень понятно, что у Вас происходит однако скажу несколько замечаний - ни разу не видел, чтобы чип "портился", ни CPLD ни FPGA.
Возможно есть какие-то другие проблемы вроде нестабильного питания или еще что-то.
Разрядность скорее всего никак не влияет - потому, что независимо от того какую разрядность напишите компилятор оптимизирует и выбросит лишние триггера. Пользуйтесь в Quartus II меню Tools->Netlist viewers -> RTL Viewer, чтобы посмотреть что же реально получилось в результате из Вашего кода.
число 150000000 это в шестнадцатеричном виде 8F0D180, значит достаточно 28 бит счетчика - описывается как reg [27:0]counter;
В том коде что вы приводите reg [32:0]pos; описывается 33хразрядный счетчик, но в RTLViewer останется только 28 разрядов.
И последнее (не по вашей проблеме, но просто замечание).
Вы пишите:
pos = pos + 1;
if (pos == 150 000 000)
begin
pos = 0;
l = l + 1'b1;
end
Так работать будет, но лучше так не писать. Такая запись создает ложное чувство, что сперва произойдет присвоение в регистр pos=pos+1, а "потом" если нужно переприсвоится ноль. это стиль программирования на C/C++.
Лучше все же написать вот так:
always @(posedge clk)
if(cnt==149999999)
cnt<=0;
else
cnt<=cnt+1;
Такая запись точно описывает суть дела - перед регистром стоит мультиплексор (if-else), который выбирает число для записи. Это, конечно, к Вашей проблеме не имеет отношения, но просто замечание по стилю написания.