2011年6月18日星期六

MATLAB随笔——图形的旋转放缩

使用MATLAB可以对图形进行旋转和放缩,这一切都是依赖这样一个矩阵
A=[ cos(alfa),-sin(alfa);
sin(alfa),+cos(alfa)];
view raw 2011061701.m hosted with ❤ by GitHub

以下是示例代码,作用是绘制一个等边三角形,并不断迭代旋转缩小:
beta=[3/6;7/6;11/6;15/6]*pi;
x=cos(beta);y=sin(beta);
figure(4),
line(x,y)
xy=[x,y];
alfa=pi/50;
A=[ cos(alfa),-sin(alfa);
sin(alfa),cos(alfa)];
for k=1:33
xy=0.9*xy*A;
x=xy(:,1);y=xy(:,2);
line(x,y)
end
view raw 2011061702.m hosted with ❤ by GitHub

所得结果如下:


如果需要逆时针旋转,只需使用A的逆矩阵A^(-1)即可。

2011年6月1日星期三

使用Verilog实现一个自校正环形计数器

A Self-reset Ring Counter realized using Verilog HDL


题目来自《Digital Design:Principles and Practices》。
This problem is from Digital Design:Principles and Practices
8.56.写出状态为1111 1110,1111 1101, 1111 1011, 1111 0111, ……, 0111 1111, 1111 1110, ……的8位自校正计数器的VHDL或Verilog程序。要求计数器具有复位输入和时能输入,当复位信号有效是计数器回到初始状态,只有当时能信号有效是才计数。

本设计选择使用Verilog硬件描述语言,选择Altera Quartus II 软件作为编译工具。
在下边的代码中,复位端子RST和使能端子ENA均为高电平有效,均为同步输入端。

The following code snippet is hosted on Github Gist.
module DDPP8_56(CLK, RST, ENA, DIGI);
input CLK, RST, ENA;
output [7:0] DIGI;
reg [7:0] DIGI;
wire tmp;
assign tmp = {DIGI[6:0]==7'b1111111}?0:1;
always @(posedge CLK)
begin
if (RST) DIGI <= 8'b11111110;
else
case (ENA)
1: DIGI <= {DIGI[6:0],tmp};
0: DIGI <= DIGI;
endcase
end
endmodule
view raw DDPP8_56.v hosted with ❤ by GitHub