�C�ӂ̕���\��PWM�iPulse Width Modulation�j�M����������PLD�iProgrammable Logic Device�j�R�[�h���Љ��B
�@���X�g1�Ɏ�����PLD�iProgrammable Logic Device�j�R�[�h�́A�C�ӂ̕���\��PWM�iPulse Width Modulation�j�M������������̂��BPWM�M��������́A�}�C�N���v���Z�b�T���g�����V�X�e���ɂ����āA�ш敝������D-A�ϊ���Ƃ��ė��p�ł���B
�@PWM�M���́A�ȒP��RC���ʉ߃t�B���^�[��ʂ��ƁAPWM�M���̃f���[�e�B�[��Ɠd���d���Ƃ̐ςɂقړ������d���l�ɕϊ��ł��邩�炾�B���������ۂ̃V�X�e���ł́A�쓮�p�̃n�[�h�E�F�A���s���S�ł��邽�߁A�ŏ��l�̓[���ɂȂ炸�A�ő�l���d���d���ɓ������Ȃ�Ȃ��B
INCLUDE "LPM_COUNTER.INC"; INCLUDE "LPM_COMPARE.INC"; INCLUDE "LPM_FF.INC"; PARAMETERS ( PWM_WIDTH = 6, -- Bits (set to 6 for testing) AVALUE = B"100000" -- Async reset value ); SUBDESIGN pwm ( clock : INPUT; aclr : INPUT; enable : INPUT = VCC; -- zeros PWM output write : INPUT; -- writes into holding register data[PWM_WIDTH-1..0] : INPUT; q : OUTPUT; -- period_pulse : OUTPUT; -- for debug and ext sync -- cout : OUTPUT; ) VARIABLE pwm : LPM_COUNTER WITH (LPM_WIDTH = PWM_WIDTH, LPM_DIRECTION = "DOWN"); cntr LPM_COUNTER WITH (LPM_WIDTH = PWM_WIDTH, LPM_DIRECTION = "DOWN"); pwm_ff SRFF; pwm_reg LPM_FF WITH (LPM_WIDTH = PWM_WIDTH, LPM_AVALUE = AVALUE); pwm_preout : NODE; period_pulse : NODE; -- for debug and ext sync cout : NODE; BEGIN ASSERT REPORT "PWM_WIDTH: %" PWM_WIDTH SEVERITY INFO; % PWM Holding Register % pwm_reg.clock = clock; pwm_reg.aset = aclr; pwm_reg.enable = write; pwm_reg.data[] = data[]; % PWM Counter % cntr.clock = clock; cntr.aclr = aclr; cntr.cnt_en = enable; period_pulse = DFF(cntr.cout, clock, !aclr, VCC); % PWM Counter % pwm.clock = clock; pwm.aclr = aclr; pwm.sload = cntr.cout; pwm.data[] = pwm_reg.q[]; pwm.cnt_en = enable; cout = pwm.cout; % PWM Output F/F % pwm_ff.clk = clock; pwm_ff.clrn = !aclr; pwm_ff.s = !cout AND period_pulse; -- turn FF on at beginning of interval pwm_ff.r = cout OR !enable; -- turn off at carry overflow. pwm_preout = pwm_ff.q; q = DFF(enable AND pwm_preout, clock, !aclr, VCC); END;
�@���X�g1�̃v���O�����́APWM_WIDTH��AVALUE�Ƃ���2�̃R���p�C���^�C���p�����[�^�[���g���āA���]�̃n�[�h�E�F�A�������I�ɐ���������̂��BPWM_WIDTH�́APWM�M���̃f���[�e�B�[��̃X�e�b�v����ݒ肷��B�Ⴆ��6�r�b�g�Ɛݒ肷��ƃX�e�b�v����26�A���Ȃ킿64�ɂȂ�BAVALUE�͓d���������A�������̓��Z�b�g����PWM�̏����l��ݒ肷��B���X�g1�ł́A�����̃X�P�[���ɐݒ肵�Ă���B
�@���̃v���O�����́A2�̎�v�ȃZ�N�V��������\������Ă���B1�́APWM�l���i�[����z�[���f�B���O���W�X�^�[�A����1��PWM�g�`������J�E���^�[�ł���B�z�[���f�B���O���W�X�^�[��PWM�J�E���^�[�Ƃ͓Ɨ��ɍX�V�ł���BPWM�J�E���^�[���I�[�o�[�t���[�����Ƃ��́A�z�[���f�B���O���W�X�^�[�̒l�������I��PWM�J�E���^�[�ɓ]�������B
�@���̃v���O�����ɂ́ACLOCK��ACLR�AENABLE�ADATA�mPWM_WIDTH-1..0�n�Ȃǂ̓��͂�����BCLOCK�̓}�X�^�[�̃V�X�e���N���b�N�ł���BACLR�ȊO�̐M���͑S�āA���̃N���b�N�̗����オ��G�b�W�ɓ�������BACLR�͓d���������Ƀn�[�h�E�F�A�����������AAVALUE�̒l���z�[���f�B���O���W�X�^�[�Ɋi�[����������ʂ����B
�@ENABLE��0�̂Ƃ��́APWM�o�͂�0�i�I�t�j�ɂȂ�BENABLE��1�ɂȂ�ƁAPWM�g�`��Q�o�͂ɔ���������BWRITE�̃A�T�[�g��1�N���b�N�T�C�N�����������Ƃ��m�F����ƁADATA�mPWM_WIDTH-1..0�n�ɓ��͂��ꂽ�f�[�^���z�[���f�B���O���W�X�^�[�ɓ]������B
�@PLD�R�[�h��Altera�̃n�[�h�E�F�A�L�q����uAHDL�v�ŋL�q�����B���̃R�[�h�́A���Ђ�PLD�ł���Β��ڃR���p�C���ł���BPLD�Ƃ��āuEPIK10TC100-3�v���g���A�ő�139MHz�œ��삷��i�p�����[�^�[�̓��X�g1�ɋL�q�������̂��g�p�j�B���̃v���O������VHDL��Verilog HDL�ɊȒP�ɕϊ��ł���B
�y�A�i���O�@�\��H�z�F�t�B���^�[��H�┭�U��H�A�Z���T�[��H�Ȃ�
�y�p���[�֘A�Ɠd���z�F�m�C�Y�̒ጸ��@�A�ی��H�Ȃ�
�y�f�B�X�v���C�ƃh���C�o�[�z�FLED�̐���A���p�@�Ȃ�
�y�v���ƃe�X�g�z�F�ȈՃe�X�^�[�̐v��A�����̌v�����u�̗L���Ȋ��p�@�Ȃ�
�y�M�����ƃp���X�����z�F���̑��̃��j�[�N�ȉ�H
���{�L���́A2008�N7��29����EDN Japan�Վ������Ƃ��Ĕ��������u��ʂ̓d�C��H200�I�v�Ɍf�ڂ��ꂽ���̂ł��B���҂̏�����Ж��A���i�̕i�ԂȂǂ͌f�ړ����̏��ł��̂ŁA���炩���߂��������������B
�u��ʂ̓d�C��H200�I�v�FEDN Japan�̉�H�A�C�f�A��e�R�����uDesign Ideas�v��1���ɂ܂Ƃ߂����́B2001�`2008�N�Ɍf�ڂ��ꂽ�L������200�{�����I���A5�̃J�e�S���[�ɕ����Ď��^�����B
Copyright © ITmedia, Inc. All Rights Reserved.