Для быстрого решения задач по схемотехнике применяют два секретных приема. Первый из них - при решении задачи не стоит использовать представление в виде схемы. Второй - нужно использовать только качественные симуляторы (которые в процессе симуляции тоже не показывают схемы устройства).
Сначала рассматриваем логику задачи. Исходя из условий задачи (использование MUX) - на первом такте мы можем прочитать первый член последовательности и добавить его к сумме, на втором - можно уже читать множитель, затем умножить на него предыдущий член и добавить полученный текущий член последовательности к сумме. Собственно и все. Берем и пишем на Verilog'е:
module progressor(q, n, clk, resu); // resu - сумма геометрической прогрессии
input wire [7:0] q, n;
input wire clk;
output reg [15:0] resu = 16'd0;
reg other_tick = 0; // признак, в случае истины обозначающий что это не первый такт
reg [15:0] accu = 16'd0; // accu - текущий член последовательности
always @(posedge clk)
begin
accu <= other_tick ? accu * q : n; // Вот эта конструкция, хорошо знакомая любому человеку, знающему Си - и превратится в Mux
resu <= resu + accu;
other_tick <= 1;
end
endmodule
На мой взгляд, особых пояснений этот код не требует.
Правильность решения проверяю в Mentor Graphics ModelSim. Компилирую, запускаю симуляцию:

По графику видно, что сумма отстает на 1 такт от подаваемых данных.
Небольшое замечание по поводу некачественных симуляторов. Днем на работе я попробовал отсимулировать эту задачу в симуляторе, встроенном в Quartus 9. На диаграмме я получил полный бред и выяснил, что этот так называемый "симулятор" для простейшего сумматора двух регистров выдает вместо суммы случайные числа, а симуляция умножителя даже в пределах одного такта выдает несколько десятков переключений в произвольные состояния. При этом с двумя константами или с константой и регистром значения правильные.
Теперь, чтобы получить картинку как побочный продукт ответа на задачу, я воспользуюсь компилятором Quartus 11 и его инструментом Rtl Viewer. Вот во что он превратит Verilog'овский файл после компиляции:
Еще примечания - вышеприведенный код только по счастливой случайности будет корректно работать в единственном случае - если он запущен на FPGA. На CPLD, в ASIC и на отдельных микросхемах он работать не будет. Почему? Потому что обязательно нужен сигнал сброса/инициализации. А у FPGA этот сигнал имеется и только поэтому я смог написать строки "resu = 16'd0" и другие со стартовым обнулением. Реальные триггеры при подаче питания в нулевое состояние переходить не обязаны. Сброс может быть как общим для всего устройства, так и отдельным для модуля, синхронным или асинхронным. В каждом из этих случаев решение задачи будет разным.