Перейти к содержанию
    

griha-leha

Участник
  • Постов

    31
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о griha-leha

  • Звание
    Участник
    Участник
  • День рождения 25.01.1985

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Как я понимаю, запись var[i*N +: N] подобна var[(i+1)*N-1 : i*N], но почуму же тогда моделсим ругается плохими словами , если указать var[(i+1)*N-1 : i*N], но при этом все замечательно с var[i*N +: N]? Буду признателен, если немного поясните.
  2. боюсь, что такая запись сработает как побитное логическое умножение, то есть переменная размера М*Н превратится в 1 бит. Если же явным образом указать размерность, то есть assign a[m-1:0]=&var[как ее указать тут?] , не уверен, что сработает.
  3. доброго времени суток. Подскажите пожалуйста как решить подобную проблему: в произвольном модуле есть строка assign a = var_1 & var_2 & ... & var_n; при этом все переменные m - разрядные. Чтобы не передавать в модуль все n переменных в модуль, была передана переменная input [m*n-1:0] var, Возник попрос, как, собственно, теперь вычислить переменную а? Проблема не в том, чтобы передать в модуль нужное количество переменных, а в том, что заранее не известно, сколько раз писать, например, логическое умножение. Как воспользоваться циклами или generate-ами - не придумал.
  4. всегда когда есть два мнения интересно услышать аргументацию. Форумчане высказались по поводу, что буст не обеспечивает защиту от кз (плавный пуск). Но люди в IR утверждают (см описание и даташит), что их схемка ОБЕСПЕЧИВАЕТ плавный пуск, хотя я его не увидил. поэтому и спрашиваю у вас (не имею возможности спросить уних), в каком это месте ОНИ увидели плавный пуск. PS. Хочу ихвиниться, что полез в незнакомую мне облать без соответствующей подготовки.
  5. а по пводу примера, как же сделан плавный пуск в сварочных инверторах(за неимением образца не могу заглянуть внутрь)? Уж точно не древним способом с закорачиваемым резистором. И какая схема включения pfc реализована в ir1150 (чтобы не лазить далеко привожу схему типичного включения) Если кто сможет, объясните пожалуйста, каким образом тут реализовано плавное включение и что будет, если запитывать микросхему с (большим) запозданием.
  6. я правильно понял, что любая микросхема корректора коэффициента мощности (PFC) обеспечивает плавный пуск. Например для UCC29910A посмотрев описание на сайте производителя, я не заметил ничего похожего на эту комбинацию слов.
  7. можно, конечно, обойтись только резисторами, но это на порядки уменьшит время жизни конденсаторов. во время поисков я набрел на какую-то микросхему (IR1150 ), помнится ее функция была PFC с плавным пуском (в иностранной терминологии Soft start).
  8. насколько я понимаю, эти резисторы применяются как основной вариант только для малых емкостей и редкого включения-выключени, например блоки питания компьтеров до 1кВт (емкости до 500 uF). Для более мощной техники этого не достаточно.
  9. Доброго времени суток. Честно признаюсь - искал, но возможно не правильно составлял запрос. Как осуществляется плавный заряд конденсаторов большой емкости (1.000 - 10.000 uF) после диодного моста в первичке (220-380 В). Включение всяких сопротивлений (с отрицательными температурными коэффициентами и обычные) не принимается за 100% выход из ситуации. Как, например, это сделано в сварочных инверторах?
  10. Проверил, не синтезируется, прийдется тебе все же на счетчиках реализовывать
  11. Видимо вы причитали мой ответ сразу после того как я его написал и не читали более. Действительно у меня была такая опечатка, которую я успешно исправил . Там и должно быть переполнение 12 битной переменной в описаном вами случае. Я тут вспомнил еще одно. Во всех (или почти всех) комментаниях предлагается решение на уровне чуть ли не структурного описания. Но современные компиляторы давно уже поведенческое описание превращают в более компактную логики. to bmangust Ты попробуй банально накотать такой код преобразования считанного 12 битного числа в 4 отображаемых и посмотри что получится (сам к сожалению проверить не могу), поместится ли это в твою микруху. module voltmeter ( input [11:0] alu_value, output reg [3:0] 1000mvolt, output reg [3:0] 100mvolt, output reg [3:0] 10mvolt, output reg [3:0] mvolt, input clk, input rst ); wire [12:0] value, wire [3:0] temp_1000mvolt; wire [3:0] temp_100mvolt; wire [3:0] temp_10mvolt; wire [3:0] temp_mvolt; assign value = alu_value + alu_value[11:3] + alu_value[11:4] +alu_value[11:5] +alu_value[11:9]; assign temp_1000mvolt = value/'d1000; assign temp_100mvolt = (value%'d1000)/'d100; assign temp_10mvolt = ((value%'d1000)%'d100)/'d10; assign temp_mvolt = ((value%'d1000)%'d100)%'d10; always @ (posedge clk) begin //тут присваиваешь выходным регистрам посчитанные значения end endmodule
  12. Во многих местах, где нужно умножать(разделить) на каку-то поправочную константу применяется сложение. Ты писал, что у тебя опорное напряжение 5В, которые на экране отображаются в виде 5000 <=> 4096=2^12. При этом 5000 = 2^12 + 2^9 +2^8 +2^7 +2^3 (проверь, может я ошибся). Пусть U_dysplay - отображаемое на экране напряжение ( 13 бит), а U_mes - полученное от ацп (12 бит), тогда wire [12:0] U_dysplay; wire [11:0] U_mes; assign U_dysplay = U_mes + U_mes[11:3] + U_mes[11:4] +U_mes[11:5] +U_mes[11:9]; можно немного увеличить точность сложения, добавив по еще одному разряду wire [12:0] U_dysplay; wire [11:0] U_mes; wire temp; assign {U_dysplay,temp} = {U_mes,temp} + U_mes[11:2] + U_mes[11:3] +U_mes[11:4] +U_mes[11:8]; На мой взгляд, такой кусочек должен поместиться в твои 16 ячеек, или же тебе прийдется оптимизировать отображение. При таком подходе возникает вопрос отображения 13 битного числа на индикаторе. Хотя эта задача решается схожим методом. Кстати, опиши как у тебя реализовано отображение.
  13. Спасибо всем за ответы. Вопрос считаю исчерпанным
  14. Спсибо, но я хотел бы услышать обо всех возможных вариантах. А если конкретно, то у меня в распоряжении только modelsim (лицензионный), и мне хотелось бы провернуть такое дело именно в нем. Скорее всего у меня хватит прав скомпилить какую-нибудь бесплатную вещицу, но не уверен. Использовал Verilator с опцией -Е, получил, откровенно говоря, не совсем то, что хотел. А именно пример: `define size 32 `define size_range `size-1:0 reg [`size_range] variable; преобразовался в reg [32-1:0] variable; то есть он мне сам предлагает вычислить 32-1, а у меня в макроопределениях много скобочных структур и арифметики, и мне не хочется все самому вычислять
  15. Не секрет, что во всех(многих) масштабируемых проектах размеры переменных задаются в виде define-ов, например `define size 32 reg [`size-1:0] variable; как можно этот код превратить в reg [31:0] variable; для наглядного представления и проверки. Знаю точно, что в С можно каким-то образом исходный файл преобразовать при помощи компилятора. А как такое сделать в verilog?
×
×
  • Создать...