0
我正在實現一個16位數的重複位移位器。要做到這一點,我有一個計數器,可以計算當我達到4'b1111時轉移和重置的次數。然後我有一個分配語句將MSB提供給輸出。但是,邏輯使得輸出每次跳過第一個MSB。 在發生任何移位之前,包含第一個MSB的最簡潔的方法是什麼?如何從零計數器verilog開始
CODE
module DAC_Control(
input [15:0]data_in,
input clk,
input rst,
output data_out,
output reg cs,
output reg enable
);
//bit counter
reg [3:0] bit_counter;
//to help with shifting
reg [15:0] shifter;
always @(data_in)
shifter <= data_in;
//shifter
always @(posedge (clk)) begin
if (rst) begin
bit_counter <= 4'b0;
enable <= 1'b0;
cs <= 1'b1;
end
else if (bit_counter == 4'b1111) begin
bit_counter <= 4'b0;
enable <= 1'b1;
cs <= 1'b1;
end
else begin //this is the problem area
bit_counter <= bit_counter + 1'b1;
enable <= 1'b0;
cs <= 1'b0;
shifter <= shifter << 1;
end
end
assign data_out = shifter[15];
endmodule
謝謝!我沒有說明data_in僅在發送使能脈衝時纔會改變,所以這不是問題。但是你的代碼應該解決從第二個MSB開始而不是第一個問題。但是,你說你的代碼給綜合提供了一個錯誤?人們如何解決這個問題? – qasddd
原代碼有合成錯誤,在上面的例子中,作爲移位器被分配在一個位置的東西應該是好的。 –
這意味着該啓用然後可以用於內部鎖存數據 –