[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено SAZH 10 мая 2006 г. 23:43
В ответ на: Господа подскажите ответ, опять я со своим ШИМом. отправлено ddka 10 мая 2006 г. 22:33

А Вы посмотрите в RTL просмотрщике Квартуса, где накосячили.
По мне, так нельзя по enable обнулять счетчик. Он свободно должен период отсчитывать и по переносу подхватывать значение, записанное в регистре. Поэтому схема на базе компаратора приемлема функционально.
Удобнее использовать два счетчика. Один отсчитывает период, другой в этом периоде отсчитывает нужную длительность.
module shim
(
input clk,
input ss_n, // интервал передачи данных
input sck, // mode=1, (CPOL=0, CPHA=1) по переднему фронту устанавливаем данные, по заднему пишем
input mosi, /// MSB first (DORD = 0)
output out
);

reg [2:0] bit_ct;
reg [7:0] byte;
reg [7:0] out_port;
reg [2:0] shift_rg;
reg [7:0] ct_a;
reg [7:0] ct_b;
reg dff_a;

always @(posedge sck or posedge ss_n) begin
if(ss_n) bit_ct <= 3'd0;
else bit_ct <= bit_ct - 1'b1; end

always @(negedge sck) begin
byte[bit_ct] <= mosi; end

always @(posedge clk) begin
shift_rg <= {shift_rg[1:0], ss_n};
ct_a <= ct_a + 1'b1;
if (~shift_rg[2] & shift_rg[1]) out_port <= byte;
if (ct_a == 8'd255) ct_b <= (out_port == 8'd0) ? 8'd1 : out_port;
else ct_b <= ct_b - 1'b1;
if (ct_a == 8'd255) dff_a <= 1'b0;
else if (ct_b == 8'd1) dff_a <= 1'b1; end

assign out = dff_a;

endmodule


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru