���f�B�A

PLD���g����PWM�M���������FDesign Ideas �M�����ƃp���X����

�C�ӂ̕���\��PWM�iPulse Width Modulation�j�M���𔭐�������PLD�iProgrammable Logic Device�j�R�[�h���Љ��B

» 2018�N07��30�� 11��00�� ���J

�C�ӂ̕���\��PWM�M���𔭐�������PLD�R�[�h

�@���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�FPWM�M���������PLD�R�[�h

�@���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

Design Ideas�`��H�݌v�A�C�f�A�W

�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.

RSS�t�B�[�h

����SNS

EDN �C�O�l�b�g���[�N

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.

OSZAR »