Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Программируемые логические схемы и их применение»

Ответ: Ну и что? Ну не могут там быть эти тычки... Вот листинг

Отправлено axalay 19 марта 2007 г. 14:46
В ответ на: патамучта чипскоп "увнутрях пашет", а "другой цифровой анализатор" снаружи - разницу чуешь? отправлено <font color=gray>Эх Василий, Василий!</font> 19 марта 2007 г. 14:37

`timescale 1ns / 1ps
// Модуль измерения температуры FPGA
// Измерения производим раз в одну секунду
// Старший разряд температуры (9) содержит флаг ошибки чтения
module MAX6627 (Reset, CLK19, Start, SPI_DI, SPI_CS, SPI_CLK, Temperature);

input Reset;
input CLK19;
input Start; // Импульс раз в секунду

input SPI_DI;
output SPI_CS;
output SPI_CLK;

output [11:0] Temperature;

reg SPI_CS, SPI_CLK;
reg [11:0] Temperature;

reg [1:0] Count_4; // Счетчик 4-х импульсов CLK19 (для формирования интервала времени < 200 нс)
reg [3:0] Count_16; // Счетчик количества считываемых с датчика бит (всего 16)
reg State; // Состояние автомата

localparam Busy = 1'b0;
localparam Read = 1'b1;

localparam [7:0] Warning_Level = 32;
localparam [7:0] Failure_Level = 40;

always @(posedge CLK19) begin
if (!Reset) begin
SPI_CS = 1;
SPI_CLK = 0;
Temperature = 0;
Count_4 = 0;
Count_16 = 0;
State = Busy;
end //if
else begin
case (State)
Busy : begin
if (Start) begin
SPI_CS = 0;
SPI_CLK = 0;
State = Read;
Count_4 = 0;
Count_16 = 0;
end //if
end //Busy
Read : begin
if (Count_4 == 1) begin
SPI_CLK = 1;
case (Count_16)
4'b0000 : Temperature[8] = SPI_DI;
4'b0001 : Temperature[7] = SPI_DI;
4'b0010 : Temperature[6] = SPI_DI;
4'b0011 : Temperature[5] = SPI_DI;
4'b0100 : Temperature[4] = SPI_DI;
4'b0101 : Temperature[3] = SPI_DI;
4'b0110 : Temperature[2] = SPI_DI;
4'b0111 : Temperature[1] = SPI_DI;
4'b1000 : Temperature[0] = SPI_DI;
4'b1101 : Temperature[9] = (SPI_DI) ? 1 : 0; // Если 1 , то ошибка
4'b1110 : Temperature[10] = (Temperature[7:0] >= Warning_Level) ? 1 : 0;
4'b1111 : Temperature[11] = (Temperature[7:0] >= Failure_Level) ? 1 : 0;
endcase //Count_16
end //if
else if (Count_4 == 3) begin
SPI_CLK = 0;
if (Count_16 == 15) begin
SPI_CS = 1;
State = Busy;
end //if
end //else if
if (Count_4 == 3) Count_16 = Count_16 + 1;
Count_4 = Count_4 + 1;
end //Read
endcase //State
end //else
end //always

endmodule //MAX6627

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 63:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru